import { Rule } from "./types";

export const StyleRules: Rule[] = [
    {
        id: "Style/AccessModifierDeclarations",
        enabled: true,
        descEn: "Checks style of how access modifiers are used.",
        descCn: "",
        versionAdded: "0.57",
        versionChanged: "0.81",
        paramList: [
            {
                param: "EnforcedStyle",
                defaultValue: "group",
                optionList: ["inline", "group"],
            },
            {
                param: "AllowModifiersOnSymbols",
                defaultValue: true,
            }
        ],
        url: "https://docs.rubocop.org/rubocop/1.50/cops_style.html#styleaccessmodifierdeclarations",
    },
    {
        id: "Style/AccessorGrouping",
        enabled: true,
        descEn: "Checks for grouping of accessors in `class` and `module` bodies.",
        descCn: "",
        versionAdded: "0.87",
        paramList: [
            {
                param: "EnforcedStyle",
                defaultValue: "grouped",
                optionList: ["separated", "grouped"],
            }
        ],
        url: "https://docs.rubocop.org/rubocop/1.50/cops_style.html#styleaccessorgrouping",
    },
    {
        id: "Style/Alias",
        enabled: true,
        descEn: "Use alias instead of alias_method.",
        descCn: "",
        versionAdded: "0.9",
        versionChanged: "0.36",
        paramList: [
            {
                param: "EnforcedStyle",
                defaultValue: "prefer_alias",
                optionList: ["prefer_alias", "prefer_alias_method"],
            }
        ],
        url: "https://docs.rubocop.org/rubocop/1.50/cops_style.html#stylealias",
    },
    {
        id: "Style/AndOr",
        enabled: true,
        descEn: "Use &&/|| instead of and/or.",
        descCn: "",
        versionAdded: "0.9",
        versionChanged: "1.21",
        paramList: [
            {
                param: "EnforcedStyle",
                defaultValue: "conditionals",
                optionList: ["always", "conditionals"],
            }
        ],
        url: "https://docs.rubocop.org/rubocop/1.50/cops_style.html#styleandor",
    },
    {
        id: "Style/ArgumentsForwarding",
        enabled: "pending",
        descEn: "Use arguments forwarding.",
        descCn: "",
        versionAdded: "1.1",
        paramList: [
            {
                param: "AllowOnlyRestArgument",
                defaultValue: true,
            }
        ],
        url: "https://docs.rubocop.org/rubocop/1.50/cops_style.html#styleargumentsforwarding",
    },
    {
        id: "Style/ArrayCoercion",
        enabled: false,
        descEn: "Use Array() instead of explicit Array check or [*var], when dealing with a variable you want to treat as an Array, but you're not certain it's an array.",
        descCn: "",
        versionAdded: "0.88",
        paramList: [],
        url: "https://docs.rubocop.org/rubocop/1.50/cops_style.html#stylearraycoercion",
    },
    {
        id: "Style/ArrayIntersect",
        enabled: "pending",
        descEn: "Use `array1.intersect?(array2)` instead of `(array1 & array2).any?`.",
        descCn: "",
        versionAdded: "1.40",
        versionChanged: "",
        paramList: [],
        url: "https://docs.rubocop.org/rubocop/1.50/cops_style.html#stylearrayintersect",
    },
    {
        id: "Style/ArrayJoin",
        enabled: true,
        descEn: "Use Array#join instead of Array#*.",
        descCn: "",
        versionAdded: "0.20",
        versionChanged: "0.31",
        paramList: [],
        url: "https://docs.rubocop.org/rubocop/1.50/cops_style.html#stylearrayjoin",
    },
    {
        id: "Style/AsciiComments",
        enabled: false,
        descEn: "Use only ascii symbols in comments.",
        descCn: "",
        versionAdded: "0.9",
        versionChanged: "1.21",
        paramList: [
            {
                param: "AllowedChars",
                defaultValue: ["©"],
            }
        ],
        url: "https://docs.rubocop.org/rubocop/1.50/cops_style.html#styleasciicomments",
    },
    {
        id: "Style/Attr",
        enabled: true,
        descEn: "Checks for uses of Module#attr.",
        descCn: "",
        versionAdded: "0.9",
        versionChanged: "0.12",
        paramList: [],
        url: "https://docs.rubocop.org/rubocop/1.50/cops_style.html#styleattr",
    },
    {
        id: "Style/AutoResourceCleanup",
        enabled: false,
        descEn: "Suggests the usage of an auto resource cleanup version of a method (if available).",
        descCn: "",
        versionAdded: "0.30",
        paramList: [],
        url: "https://docs.rubocop.org/rubocop/1.50/cops_style.html#styleautoresourcecleanup",
    },
    {
        id: "Style/BarePercentLiterals",
        enabled: true,
        descEn: "Checks if usage of %() or %Q() matches configuration.",
        descCn: "",
        versionAdded: "0.25",
        paramList: [
            {
                param: "EnforcedStyle",
                defaultValue: "bare_percent",
                optionList: ["percent_q", "bare_percent"],
            }
        ],
        url: "https://docs.rubocop.org/rubocop/1.50/cops_style.html#stylebarepercentliterals",
    },
    {
        id: "Style/BeginBlock",
        enabled: true,
        descEn: "Avoid the use of BEGIN blocks.",
        descCn: "",
        versionAdded: "0.9",
        paramList: [],
        url: "https://docs.rubocop.org/rubocop/1.50/cops_style.html#stylebeginblock",
    },
    {
        id: "Style/BisectedAttrAccessor",
        enabled: true,
        descEn: "Checks for places where `attr_reader` and `attr_writer` for the same method can be combined into single `attr_accessor`.",
        descCn: "",
        versionAdded: "0.87",
        paramList: [],
        url: "https://docs.rubocop.org/rubocop/1.50/cops_style.html#stylebisectedattraccessor",
    },
    {
        id: "Style/BlockComments",
        enabled: true,
        descEn: "Do not use block comments.",
        descCn: "",
        versionAdded: "0.9",
        versionChanged: "0.23",
        paramList: [],
        url: "https://docs.rubocop.org/rubocop/1.50/cops_style.html#styleblockcomments",
    },
    {
        id: "Style/BlockDelimiters",
        enabled: true,
        descEn: "Avoid using {...} for multi-line blocks (multiline chaining is always ugly). Prefer {...} over do...end for single-line blocks.",
        descCn: "https://docs.rubocop.org/rubocop/1.50/cops_style.html#styleblockdelimiters",
        versionAdded: "0.30",
        versionChanged: "0.35",
        paramList: [
            {
                param: "EnforcedStyle",
                defaultValue: "line_count_based",
                optionList: ["line_count_based", "semantic", "braces_for_chaining", "always_braces"],
            },
            {
                param: "ProceduralMethods",
                defaultValue: ["benchmark", "bm", "bmbm", "create", "each_with_object", "measure", "new", "realtime", "tap", "with_object"],
            },
            {
                param: "FunctionalMethods",
                defaultValue: ["let", "let!", "subject", "watch"],
            },
            {
                param: "AllowedMethods",
                defaultValue: ["lambda", "proc", "it"],
            },
            {
                param: "AllowedPatterns",
                defaultValue: [],
            },
            {
                param: "AllowBracesOnProceduralOneLiners",
                defaultValue: false,
            },
            {
                param: "BracesRequiredMethods",
                defaultValue: [],
            },
        ],
        url: "https://docs.rubocop.org/rubocop/1.50/cops_style.html#styleblockdelimiters",
    },
    {
        id: "Style/CaseEquality",
        enabled: true,
        descEn: "Avoid explicit use of the case equality operator(===).",
        descCn: "",
        versionAdded: "0.9",
        versionChanged: "0.89",
        paramList: [
            {
                param: "AllowOnConstant",
                defaultValue: false,
            },
            {
                param: "AllowOnSelfClass",
                defaultValue: false,
            }
        ],
        url: "https://docs.rubocop.org/rubocop/1.50/cops_style.html#stylecaseequality",
    },
    {
        id: "Style/CaseLikeIf",
        enabled: true,
        descEn: "Identifies places where `if-elsif` constructions can be replaced with `case-when`.",
        descCn: "",
        versionAdded: "0.88",
        versionChanged: "1.48",
        paramList: [
            {
                param: "MinBranchesCount",
                defaultValue: 3,
            }
        ],
        url: "https://docs.rubocop.org/rubocop/1.50/cops_style.html#stylecaselikeif",
    },
    {
        id: "Style/CharacterLiteral",
        enabled: true,
        descEn: "Checks for uses of character literals.",
        descCn: "",
        versionAdded: "0.9",
        paramList: [],
        url: "https://docs.rubocop.org/rubocop/1.50/cops_style.html#stylecharacterliteral",
    },
    {
        id: "Style/ClassAndModuleChildren",
        enabled: true,
        descEn: "Checks style of children classes and modules.",
        descCn: "",
        versionAdded: "0.19",
        paramList: [
            {
                param: "EnforcedStyle",
                defaultValue: "nested",
                optionList: ["nested", "compact"],
            }
        ],
        url: "https://docs.rubocop.org/rubocop/1.50/cops_style.html#styleclassandmodulechildren",
    },
    {
        id: "Style/ClassCheck",
        enabled: true,
        descEn: "Enforces consistent use of `Object#is_a?` or `Object#kind_of?`.",
        descCn: "",
        versionAdded: "0.24",
        paramList: [
            {
                param: "EnforcedStyle",
                defaultValue: "is_a?",
                optionList: ["is_a?", "kind_of?"],
            }
        ],
        url: "https://docs.rubocop.org/rubocop/1.50/cops_style.html#styleclasscheck",
    },
    {
        id: "Style/ClassEqualityComparison",
        enabled: true,
        descEn: "Enforces the use of `Object#instance_of?` instead of class comparison for equality.",
        descCn: "",
        versionAdded: "0.93",
        paramList: [
            {
                param: "AllowedMethods",
                defaultValue: ["==", "equal?", "eql?"],
            },
            {
                param: "AllowedPatterns",
                defaultValue: [],
            }
        ],
        url: "https://docs.rubocop.org/rubocop/1.50/cops_style.html#styleclassequalitycomparison",
    },
    {
        id: "Style/ClassMethods",
        enabled: true,
        descEn: "Use self when defining module/class methods.",
        descCn: "",
        versionAdded: "0.9",
        versionChanged: "0.20",
        paramList: [],
        url: "https://docs.rubocop.org/rubocop/1.50/cops_style.html#styleclassmethods",
    },
    {
        id: "Style/ClassMethodsDefinitions",
        enabled: false,
        descEn: "Enforces using `def self.method_name` or `class << self` to define class methods.",
        descCn: "",
        versionAdded: "0.89",
        paramList: [
            {
                param: "EnforcedStyle",
                defaultValue: "def_self",
                optionList: ["def_self", "self_class"],
            }
        ],
        url: "https://docs.rubocop.org/rubocop/1.50/cops_style.html#styleclassmethodsdefinitions",
    },
    {
        id: "Style/ClassVars",
        enabled: true,
        descEn: "Avoid the use of class variables.",
        descCn: "",
        versionAdded: "0.13",
        paramList: [],
        url: "https://docs.rubocop.org/rubocop/1.50/cops_style.html#styleclassvars",
    },
    {
        id: "Style/CollectionCompact",
        enabled: "pending",
        descEn: "Use `{Array,Hash}#{compact,compact!}` instead of custom logic to reject nils.",
        descCn: "",
        versionAdded: "1.2",
        versionChanged: "1.3",
        paramList: [],
        url: "https://docs.rubocop.org/rubocop/1.50/cops_style.html#stylecollectioncompact",
    },
    {
        id: "Style/CollectionMethods",
        enabled: false,
        descEn: "Preferred collection methods.",
        descCn: "",
        versionAdded: "0.9",
        versionChanged: "1.7",
        paramList: [
            {
                param: "PreferredMethods",
                defaultValue: { "collect": "map", "collect!": "map!", "inject": "reduce", "detect": "find", "find_all": "select", "member?": "include?" },
                validValue: (value: unknown) => {
                    if (typeof value != "object") {
                        return "值必须是对象";
                    }
                    for (const v of Object.values(value as Object)) {
                        if (typeof v !== "string") {
                            return "对象值必须是字符串";
                        }
                    }
                    return null;
                }
            },
            {
                param: "MethodsAcceptingSymbol",
                defaultValue: ["inject", "reduce"],
            }
        ],
        url: "https://docs.rubocop.org/rubocop/1.50/cops_style.html#stylecollectionmethods",
    },
    {
        id: "Style/ColonMethodCall",
        enabled: true,
        descEn: "Do not use :: for method call.",
        descCn: "",
        versionAdded: "0.9",
        paramList: [],
        url: "https://docs.rubocop.org/rubocop/1.50/cops_style.html#stylecolonmethodcall",
    },
    {
        id: "Style/ColonMethodDefinition",
        enabled: true,
        descEn: "Do not use :: for defining class methods.",
        descCn: "",
        versionAdded: "0.52",
        paramList: [],
        url: "https://docs.rubocop.org/rubocop/1.50/cops_style.html#stylecolonmethoddefinition",
    },
    {
        id: "Style/CombinableLoops",
        enabled: true,
        descEn: "Checks for places where multiple consecutive loops over the same data can be combined into a single loop.",
        descCn: "",
        versionAdded: "0.90",
        paramList: [],
        url: "https://docs.rubocop.org/rubocop/1.50/cops_style.html#stylecombinableloops",
    },
    {
        id: "Style/CommandLiteral",
        enabled: true,
        descEn: "Use `` or %x around command literals.",
        descCn: "",
        versionAdded: "0.30",
        paramList: [
            {
                param: "EnforcedStyle",
                defaultValue: "backticks",
                optionList: ["backticks", "percent_x", "mixed"],
            }
        ],
        url: "https://docs.rubocop.org/rubocop/1.50/cops_style.html#stylecommandliteral",
    },
    {
        id: "Style/CommentAnnotation",
        enabled: true,
        descEn: "Checks formatting of special comments (TODO, FIXME, OPTIMIZE, HACK, REVIEW, NOTE).",
        descCn: "",
        versionAdded: "0.10",
        versionChanged: "1.20",
        paramList: [
            {
                param: "Keywords",
                defaultValue: ["TODO", "FIXME", "OPTIMIZE", "HACK", "REVIEW", "NOTE"],
            },
            {
                param: "RequireColon",
                defaultValue: true,
            }
        ],
        url: "https://docs.rubocop.org/rubocop/1.50/cops_style.html#stylecommentannotation",
    },
    {
        id: "Style/CommentedKeyword",
        enabled: true,
        descEn: "Do not place comments on the same line as certain keywords.",
        descCn: "",
        versionAdded: "0.51",
        versionChanged: "'1.19",
        paramList: [],
        url: "https://docs.rubocop.org/rubocop/1.50/cops_style.html#stylecommentedkeyword",
    },
    {
        id: "Style/ComparableClamp",
        enabled: "pending",
        descEn: "Enforces the use of `Comparable#clamp` instead of comparison by minimum and maximum.",
        descCn: "",
        versionAdded: "1.44",
        paramList: [],
        url: "https://docs.rubocop.org/rubocop/1.50/cops_style.html#stylecomparableclamp",
    },
    {
        id: "Style/ConcatArrayLiterals",
        enabled: "pending",
        descEn: "Enforces the use of `Array#push(item)` instead of `Array#concat([item])` to avoid redundant array literals.",
        descCn: "",
        versionAdded: "1.41",
        paramList: [],
        url: "https://docs.rubocop.org/rubocop/1.50/cops_style.html#styleconcatarrayliterals",
    },
    {
        id: "Style/ConditionalAssignment",
        enabled: true,
        descEn: "Use the return value of `if` and `case` statements for assignment to a variable and variable comparison instead of assigning that variable inside of each branch.",
        descCn: "",
        versionAdded: "0.36",
        versionChanged: "0.47",
        paramList: [
            {
                param: "EnforcedStyle",
                defaultValue: "assign_to_condition",
                optionList: ["assign_to_condition", "assign_inside_condition"],
            },
            {
                param: "SingleLineConditionsOnly",
                defaultValue: true,
            },
            {
                param: "IncludeTernaryExpressions",
                defaultValue: true,
            }
        ],
        url: "https://docs.rubocop.org/rubocop/1.50/cops_style.html#styleconditionalassignment",
    },
    {
        id: "Style/ConstantVisibility",
        enabled: false,
        descEn: "Check that class- and module constants have visibility declarations.",
        descCn: "",
        versionAdded: "0.66",
        versionChanged: "1.10",
        paramList: [
            {
                param: "IgnoreModules",
                defaultValue: false,
            }
        ],
        url: "https://docs.rubocop.org/rubocop/1.50/cops_style.html#styleconstantvisibility",
    },
    {
        id: "Style/Copyright",
        enabled: false,
        descEn: "Include a copyright notice in each file before any code.",
        descCn: "",
        versionAdded: "0.30",
        paramList: [
            {
                param: "Notice",
                defaultValue: "^Copyright (\\(c\\) )?2[0-9]{3} .+",
            },
            {
                param: "AutocorrectNotice",
                defaultValue: "``",
            }
        ],
        url: "https://docs.rubocop.org/rubocop/1.50/cops_style.html#stylecopyright",
    },
    {
        id: "Style/DataInheritance",
        enabled: "pending",
        descEn: "Checks for inheritance from Data.define.",
        descCn: "",
        versionAdded: "1.49",
        paramList: [],
        url: "https://docs.rubocop.org/rubocop/1.50/cops_style.html#styledatainheritance",
    },
    {
        id: "Style/DateTime",
        enabled: false,
        descEn: "Use Time over DateTime.",
        descCn: "",
        versionAdded: "0.51",
        versionChanged: "0.92",
        paramList: [
            {
                param: "AllowCoercion",
                defaultValue: false,
            }
        ],
        url: "https://docs.rubocop.org/rubocop/1.50/cops_style.html#styledatetime",
    },
    {
        id: "Style/DefWithParentheses",
        enabled: true,
        descEn: "Use def with parentheses when there are arguments.",
        descCn: "",
        versionAdded: "0.9",
        versionChanged: "0.12",
        paramList: [],
        url: "https://docs.rubocop.org/rubocop/1.50/cops_style.html#styledefwithparentheses",
    },
    {
        id: "Style/Dir",
        enabled: true,
        descEn: "Use the `__dir__` method to retrieve the canonicalized absolute path to the current file.",
        descCn: "",
        versionAdded: "0.50",
        paramList: [],
        url: "https://docs.rubocop.org/rubocop/1.50/cops_style.html#styledir",
    },
    {
        id: "Style/DirEmpty",
        enabled: "pending",
        descEn: "Prefer to use `Dir.empty?('path/to/dir')` when checking if a directory is empty.",
        descCn: "",
        versionAdded: "1.48",
        paramList: [],
        url: "https://docs.rubocop.org/rubocop/1.50/cops_style.html#styledirempty",
    },
    {
        id: "Style/DisableCopsWithinSourceCodeDirective",
        enabled: false,
        descEn: "Forbids disabling/enabling cops within source code.",
        descCn: "",
        versionAdded: "0.82",
        versionChanged: "1.9",
        paramList: [
            {
                param: "AllowedCops",
                defaultValue: [],
            }
        ],
        url: "https://docs.rubocop.org/rubocop/1.50/cops_style.html#styledisablecopswithinsourcecodedirective",
    },
    {
        id: "Style/DocumentDynamicEvalDefinition",
        enabled: "pending",
        descEn: "When using `class_eval` (or other `eval`) with string interpolation, add a comment block showing its appearance if interpolated.",
        descCn: "",
        versionAdded: "1.1",
        versionChanged: "1.3",
        paramList: [],
        url: "https://docs.rubocop.org/rubocop/1.50/cops_style.html#styledocumentdynamicevaldefinition",
    },
    {
        id: "Style/Documentation",
        enabled: true,
        descEn: "Document classes and non-namespace modules.",
        descCn: "",
        versionAdded: "0.9",
        paramList: [
            {
                param: "AllowedConstants",
                defaultValue: [],
            },
            {
                param: "Exclude",
                defaultValue: ["spec/**/*", "test/**/*"],
            }
        ],
        url: "https://docs.rubocop.org/rubocop/1.50/cops_style.html#styledocumentation",
    },
    {
        id: "Style/DocumentationMethod",
        enabled: false,
        descEn: "Checks for missing documentation comment for public methods.",
        descCn: "",
        versionAdded: "0.43",
        paramList: [
            {
                param: "Exclude",
                defaultValue: ["spec/**/*", "test/**/*"],
            },
            {
                param: "RequireForNonPublicMethods",
                defaultValue: false,
            }
        ],
        url: "https://docs.rubocop.org/rubocop/1.50/cops_style.html#styledocumentationmethod",
    },
    {
        id: "Style/DoubleCopDisableDirective",
        enabled: true,
        descEn: "Checks for double rubocop:disable comments on a single line.",
        descCn: "",
        versionAdded: "0.73",
        paramList: [],
        url: "https://docs.rubocop.org/rubocop/1.50/cops_style.html#styledoublecopdisabledirective",
    },
    {
        id: "Style/DoubleNegation",
        enabled: true,
        descEn: "Checks for uses of double negation (!!).",
        descCn: "",
        versionAdded: "0.19",
        versionChanged: "1.2",
        paramList: [
            {
                param: "EnforcedStyle",
                defaultValue: "allowed_in_returns",
                optionList: ["allowed_in_returns", "forbidden"],
            }
        ],
        url: "https://docs.rubocop.org/rubocop/1.50/cops_style.html#styledoublenegation",
    },
    {
        id: "Style/EachForSimpleLoop",
        enabled: true,
        descEn: "Use `Integer#times` for a simple loop which iterates a fixed number of times.",
        descCn: "",
        versionAdded: "0.41",
        paramList: [],
        url: "https://docs.rubocop.org/rubocop/1.50/cops_style.html#styleeachforsimpleloop",
    },
    {
        id: "Style/EachWithObject",
        enabled: true,
        descEn: "Prefer `each_with_object` over `inject` or `reduce`.",
        descCn: "",
        versionAdded: "0.22",
        versionChanged: "0.42",
        paramList: [],
        url: "https://docs.rubocop.org/rubocop/1.50/cops_style.html#styleeachwithobject",
    },
    {
        id: "Style/EmptyBlockParameter",
        enabled: true,
        descEn: "Omit pipes for empty block parameters.",
        descCn: "",
        versionAdded: "0.52",
        paramList: [],
        url: "https://docs.rubocop.org/rubocop/1.50/cops_style.html#styleemptyblockparameter",
    },
    {
        id: "Style/EmptyCaseCondition",
        enabled: true,
        descEn: "Avoid empty condition in case statements.",
        descCn: "",
        versionAdded: "0.40",
        paramList: [],
        url: "https://docs.rubocop.org/rubocop/1.50/cops_style.html#styleemptycasecondition",
    },
    {
        id: "Style/EmptyElse",
        enabled: true,
        descEn: "Avoid empty else-clauses.",
        descCn: "",
        versionAdded: "0.28",
        versionChanged: "0.32",
        paramList: [
            {
                param: "EnforcedStyle",
                defaultValue: "both",
                optionList: ["empty", "nil", "both"],
            },
            {
                param: "AllowComments",
                defaultValue: false,
            }
        ],
        url: "https://docs.rubocop.org/rubocop/1.50/cops_style.html#styleemptyelse",
    },
    {
        id: "Style/EmptyHeredoc",
        enabled: "pending",
        descEn: "Checks for using empty heredoc to reduce redundancy.",
        descCn: "",
        versionAdded: "1.32",
        paramList: [],
        url: "https://docs.rubocop.org/rubocop/1.50/cops_style.html#styleemptyheredoc",
    },
    {
        id: "Style/EmptyLambdaParameter",
        enabled: true,
        descEn: "Omit parens for empty lambda parameters.",
        descCn: "",
        versionAdded: "0.52",
        paramList: [],
        url: "https://docs.rubocop.org/rubocop/1.50/cops_style.html#styleemptylambdaparameter",
    },
    {
        id: "Style/EmptyLiteral",
        enabled: true,
        descEn: "Prefer literals to Array.new/Hash.new/String.new.",
        descCn: "",
        versionAdded: "0.9",
        versionChanged: "0.12",
        paramList: [],
        url: "https://docs.rubocop.org/rubocop/1.50/cops_style.html#styleemptyliteral",
    },
    {
        id: "Style/EmptyMethod",
        enabled: true,
        descEn: "Checks the formatting of empty method definitions.",
        descCn: "",
        versionAdded: "0.46",
        paramList: [
            {
                param: "EnforcedStyle",
                defaultValue: "compact",
                optionList: ["compact", "expanded"],
            }
        ],
        url: "https://docs.rubocop.org/rubocop/1.50/cops_style.html#styleemptymethod",
    },
    {
        id: "Style/Encoding",
        enabled: true,
        descEn: "Use UTF-8 as the source file encoding.",
        descCn: "",
        versionAdded: "0.9",
        versionChanged: "0.50",
        paramList: [],
        url: "https://docs.rubocop.org/rubocop/1.50/cops_style.html#styleencoding",
    },
    {
        id: "Style/EndBlock",
        enabled: true,
        descEn: "Avoid the use of END blocks.",
        descCn: "",
        versionAdded: "0.9",
        versionChanged: "0.81",
        paramList: [],
        url: "https://docs.rubocop.org/rubocop/1.50/cops_style.html#styleendblock",
    },
    {
        id: "Style/EndlessMethod",
        enabled: "pending",
        descEn: "Avoid the use of multi-lined endless method definitions.",
        descCn: "",
        versionAdded: "1.8",
        paramList: [
            {
                param: "EnforcedStyle",
                defaultValue: "allow_single_line",
                optionList: ["allow_single_line", "allow_always", "disallow"],
            }
        ],
        url: "https://docs.rubocop.org/rubocop/1.50/cops_style.html#styleendlessmethod",
    },
    {
        id: "Style/EnvHome",
        enabled: "pending",
        descEn: "Checks for consistent usage of `ENV['HOME']`.",
        descCn: "",
        versionAdded: "1.29",
        paramList: [],
        url: "https://docs.rubocop.org/rubocop/1.50/cops_style.html#styleenvhome",
    },
    {
        id: "Style/EvalWithLocation",
        enabled: true,
        descEn: "Pass `__FILE__` and `__LINE__` to `eval` method, as they are used by backtraces.",
        descCn: "",
        versionAdded: "0.52",
        paramList: [],
        url: "https://docs.rubocop.org/rubocop/1.50/cops_style.html#styleevalwithlocation",
    },
    {
        id: "Style/EvenOdd",
        enabled: true,
        descEn: "Favor the use of `Integer#even?` && `Integer#odd?`.",
        descCn: "",
        versionAdded: "0.12",
        versionChanged: "0.29",
        paramList: [],
        url: "https://docs.rubocop.org/rubocop/1.50/cops_style.html#styleevenodd",
    },
    {
        id: "Style/ExpandPathArguments",
        enabled: true,
        descEn: "Use `expand_path(__dir__)` instead of `expand_path('..', __FILE__)`.",
        descCn: "",
        versionAdded: "0.53",
        paramList: [],
        url: "https://docs.rubocop.org/rubocop/1.50/cops_style.html#styleexpandpatharguments",
    },
    {
        id: "Style/ExplicitBlockArgument",
        enabled: true,
        descEn: "Consider using explicit block argument to avoid writing block literal that just passes its arguments to another block.",
        descCn: "",
        versionAdded: "0.89",
        versionChanged: "1.8",
        paramList: [],
        url: "https://docs.rubocop.org/rubocop/1.50/cops_style.html#styleexplicitblockargument",
    },
    {
        id: "Style/ExponentialNotation",
        enabled: true,
        descEn: "When using exponential notation, favor a mantissa between 1 (inclusive) and 10 (exclusive).",
        descCn: "",
        versionAdded: "0.82",
        paramList: [
            {
                param: "EnforcedStyle",
                defaultValue: "scientific",
                optionList: ["scientific", "engineering", "integral"],
            }
        ],
        url: "https://docs.rubocop.org/rubocop/1.50/cops_style.html#styleexponentialnotation",
    },
    {
        id: "Style/FetchEnvVar",
        enabled: "pending",
        descEn: "Suggests `ENV.fetch` for the replacement of `ENV[]`.",
        descCn: "",
        versionAdded: "1.28",
        paramList: [
            {
                param: "AllowedVars",
                defaultValue: [],
            }
        ],
        url: "https://docs.rubocop.org/rubocop/1.50/cops_style.html#stylefetchenvvar",
    },
    {
        id: "Style/FileEmpty",
        enabled: "pending",
        descEn: "Prefer to use `File.empty?('path/to/file')` when checking if a file is empty.",
        descCn: "",
        versionAdded: "1.48",
        paramList: [],
        url: "https://docs.rubocop.org/rubocop/1.50/cops_style.html#stylefileempty",
    },
    {
        id: "Style/FileRead",
        enabled: "pending",
        descEn: "Favor `File.(bin)read` convenience methods.",
        descCn: "",
        versionAdded: "1.24",
        paramList: [],
        url: "https://docs.rubocop.org/rubocop/1.50/cops_style.html#stylefileread",
    },
    {
        id: "Style/FileWrite",
        enabled: "pending",
        descEn: "Favor `File.(bin)write` convenience methods.",
        descCn: "",
        versionAdded: "1.24",
        paramList: [],
        url: "https://docs.rubocop.org/rubocop/1.50/cops_style.html#stylefilewrite",
    },
    {
        id: "Style/FloatDivision",
        enabled: true,
        descEn: "For performing float division, coerce one side only.",
        descCn: "",
        versionAdded: "0.72",
        versionChanged: "1.9",
        paramList: [
            {
                param: "EnforcedStyle",
                defaultValue: "single_coerce",
                optionList: ["left_coerce", "right_coerce", "single_coerce", "fdiv"]
            }
        ],
        url: "https://docs.rubocop.org/rubocop/1.50/cops_style.html#stylefloatdivision",
    },
    {
        id: "Style/For",
        enabled: true,
        descEn: "Checks use of for or each in multiline loops.",
        descCn: "",
        versionAdded: "0.13",
        versionChanged: "1.26",
        paramList: [
            {
                param: "EnforcedStyle",
                defaultValue: "each",
                optionList: ["each", "for"],
            }
        ],
        url: "https://docs.rubocop.org/rubocop/1.50/cops_style.html#stylefor",
    },
    {
        id: "Style/FormatString",
        enabled: true,
        descEn: "Enforce the use of Kernel#sprintf, Kernel#format or String#%.",
        descCn: "",
        versionAdded: "0.19",
        versionChanged: "0.49",
        paramList: [
            {
                param: "EnforcedStyle",
                defaultValue: "format",
                optionList: ["format", "sprintf", "percent"],
            }
        ],
        url: "https://docs.rubocop.org/rubocop/1.50/cops_style.html#styleformatstring",
    },
    {
        id: "Style/FormatStringToken",
        enabled: true,
        descEn: "Use a consistent style for format string tokens.",
        descCn: "",
        versionAdded: "0.49",
        versionChanged: "1.0",
        paramList: [
            {
                param: "EnforcedStyle",
                defaultValue: "annotated",
                optionList: ["annotated", "template", "unannotated"],
            },
            {
                param: "MaxUnannotatedPlaceholdersAllowed",
                defaultValue: 1,
            },
            {
                param: "AllowedMethods",
                defaultValue: [],
            },
            {
                param: "AllowedPatterns",
                defaultValue: [],
            }
        ],
        url: "https://docs.rubocop.org/rubocop/1.50/cops_style.html#styleformatstringtoken",
    },
    {
        id: "Style/FrozenStringLiteralComment",
        enabled: true,
        descEn: "Add the frozen_string_literal comment to the top of files to help transition to frozen string literals by default.",
        descCn: "",
        versionAdded: "0.36",
        versionChanged: "0.79",
        paramList: [
            {
                param: "EnforcedStyle",
                defaultValue: "always",
                optionList: ["always", "always_true", "never"],
            }
        ],
        url: "https://docs.rubocop.org/rubocop/1.50/cops_style.html#stylefrozenstringliteralcomment",
    },
    {
        id: "Style/GlobalStdStream",
        enabled: true,
        descEn: "Enforces the use of `$stdout/$stderr/$stdin` instead of `STDOUT/STDERR/STDIN`.",
        descCn: "",
        versionAdded: "0.89",
        paramList: [],
        url: "https://docs.rubocop.org/rubocop/1.50/cops_style.html#styleglobalstdstream",
    },
    {
        id: "Style/GlobalVars",
        enabled: true,
        descEn: "Do not introduce global variables.",
        descCn: "",
        versionAdded: "0.13",
        paramList: [
            {
                param: "AllowedVariables",
                defaultValue: [],
            }
        ],
        url: "https://docs.rubocop.org/rubocop/1.50/cops_style.html#styleglobalvars",
    },
    {
        id: "Style/GuardClause",
        enabled: true,
        descEn: "Check for conditionals that can be replaced with guard clauses.",
        descCn: "",
        versionAdded: "0.20",
        versionChanged: "1.31",
        paramList: [
            {
                param: "MinBodyLength",
                defaultValue: 1,
            },
            {
                param: "AllowConsecutiveConditionals",
                defaultValue: false,
            }
        ],
        url: "https://docs.rubocop.org/rubocop/1.50/cops_style.html#styleguardclause",
    },
    {
        id: "Style/HashAsLastArrayItem",
        enabled: true,
        descEn: "Checks for presence or absence of braces around hash literal as a last array item depending on configuration.",
        descCn: "",
        versionAdded: "0.88",
        paramList: [
            {
                param: "EnforcedStyle",
                defaultValue: "braces",
                optionList: ["braces", "no_braces"],
            }
        ],
        url: "https://docs.rubocop.org/rubocop/1.50/cops_style.html#stylehashaslastarrayitem",
    },
    {
        id: "Style/HashConversion",
        enabled: "pending",
        descEn: "Avoid Hash[] in favor of ary.to_h or literal hashes.",
        descCn: "",
        versionAdded: "1.10",
        versionChanged: "1.11",
        paramList: [
            {
                param: "AllowSplatArgument",
                defaultValue: true,
            }
        ],
        url: "https://docs.rubocop.org/rubocop/1.50/cops_style.html#stylehashconversion",
    },
    {
        id: "Style/HashEachMethods",
        enabled: true,
        descEn: "Use Hash#each_key and Hash#each_value.",
        descCn: "",
        versionAdded: "0.80",
        versionChanged: "1.16",
        paramList: [
            {
                param: "AllowedReceivers",
                defaultValue: ["Thread.current"],
            }
        ],
        url: "https://docs.rubocop.org/rubocop/1.50/cops_style.html#stylehasheachmethods",
    },
    {
        id: "Style/HashExcept",
        enabled: "pending",
        descEn: "Checks for usages of `Hash#reject`, `Hash#select`, and `Hash#filter` methods that can be replaced with `Hash#except` method.",
        descCn: "",
        versionAdded: "1.7",
        versionChanged: "1.39",
        paramList: [],
        url: "https://docs.rubocop.org/rubocop/1.50/cops_style.html#stylehashexcept",
    },
    {
        id: "Style/HashLikeCase",
        enabled: true,
        descEn: "Checks for places where `case-when` represents a simple 1:1 mapping and can be replaced with a hash lookup.",
        descCn: "",
        versionAdded: "0.88",
        paramList: [
            {
                param: "MinBranchesCount",
                defaultValue: 3,
            }
        ],
        url: "https://docs.rubocop.org/rubocop/1.50/cops_style.html#stylehashlikecase",
    },
    {
        id: "Style/HashSyntax",
        enabled: true,
        descEn: "Prefer Ruby 1.9 hash syntax { a: 1, b: 2 } over 1.8 syntax { :a => 1, :b => 2 }.",
        descCn: "",
        versionAdded: "0.9",
        versionChanged: "1.24",
        paramList: [
            {
                param: "EnforcedStyle",
                defaultValue: "ruby19",
                optionList: ["ruby19", "hash_rockets", "no_mixed_keys", "ruby19_no_mixed_keys"],
            },
            {
                param: "EnforcedShorthandSyntax",
                defaultValue: "always",
                optionList: ["always", "never", "either", "consistent"],
            },
            {
                param: "UseHashRocketsWithSymbolValues",
                defaultValue: false,
            },
            {
                param: "PreferHashRocketsForNonAlnumEndingSymbols",
                defaultValue: false,
            }
        ],
        url: "https://docs.rubocop.org/rubocop/1.50/cops_style.html#stylehashsyntax",
    },
    {
        id: "Style/HashTransformKeys",
        enabled: true,
        descEn: "Prefer `transform_keys` over `each_with_object`, `map`, or `to_h`.",
        descCn: "",
        versionAdded: "0.80",
        versionChanged: "0.90",
        paramList: [],
        url: "https://docs.rubocop.org/rubocop/1.50/cops_style.html#stylehashtransformkeys",
    },
    {
        id: "Style/HashTransformValues",
        enabled: true,
        descEn: "Prefer `transform_values` over `each_with_object`, `map`, or `to_h`.",
        descCn: "",
        versionAdded: "0.80",
        versionChanged: "0.90",
        paramList: [],
        url: "https://docs.rubocop.org/rubocop/1.50/cops_style.html#stylehashtransformvalues",
    },
    {
        id: "Style/IdenticalConditionalBranches",
        enabled: true,
        descEn: "Checks that conditional statements do not have an identical line at the end of each branch, which can validly be moved out of the conditional.",
        descCn: "",
        versionAdded: "0.36",
        versionChanged: "1.19",
        paramList: [],
        url: "https://docs.rubocop.org/rubocop/1.50/cops_style.html#styleidenticalconditionalbranches",
    },
    {
        id: "Style/IfInsideElse",
        enabled: true,
        descEn: "Finds if nodes inside else, which can be converted to elsif.",
        descCn: "",
        versionAdded: "0.36",
        versionChanged: "1.3",
        paramList: [
            {
                param: "AllowIfModifier",
                defaultValue: false,
            }
        ],
        url: "https://docs.rubocop.org/rubocop/1.50/cops_style.html#styleifinsideelse",
    },
    {
        id: "Style/IfUnlessModifier",
        enabled: true,
        descEn: "Favor modifier if/unless usage when you have a single-line body.",
        descCn: "",
        versionAdded: "0.9",
        versionChanged: "0.30",
        paramList: [],
        url: "https://docs.rubocop.org/rubocop/1.50/cops_style.html#styleifunlessmodifier",
    },
    {
        id: "Style/IfUnlessModifierOfIfUnless",
        enabled: true,
        descEn: "Avoid modifier if/unless usage on conditionals.",
        descCn: "",
        versionAdded: "0.39",
        versionChanged: "0.87",
        paramList: [],
        url: "https://docs.rubocop.org/rubocop/1.50/cops_style.html#styleifunlessmodifierofifunless",
    },
    {
        id: "Style/IfWithBooleanLiteralBranches",
        enabled: "pending",
        descEn: "Checks for redundant `if` with boolean literal branches.",
        descCn: "",
        versionAdded: "1.9",
        paramList: [
            {
                param: "AllowedMethods",
                defaultValue: ["nonzero?"],
            }
        ],
        url: "https://docs.rubocop.org/rubocop/1.50/cops_style.html#styleifwithbooleanliteralbranches",
    },
    {
        id: "Style/IfWithSemicolon",
        enabled: true,
        descEn: "Do not use if x; .... Use the ternary operator instead.",
        descCn: "",
        versionAdded: "0.9",
        versionChanged: "0.83",
        paramList: [],
        url: "https://docs.rubocop.org/rubocop/1.50/cops_style.html#styleifwithsemicolon",
    },
    {
        id: "Style/ImplicitRuntimeError",
        enabled: false,
        descEn: "Use `raise` or `fail` with an explicit exception class and message, rather than just a message.",
        descCn: "",
        versionAdded: "0.41",
        paramList: [],
        url: "https://docs.rubocop.org/rubocop/1.50/cops_style.html#styleimplicitruntimeerror",
    },
    {
        id: "Style/InPatternThen",
        enabled: "pending",
        descEn: "Checks for `in;` uses in `case` expressions.",
        descCn: "",
        versionAdded: "1.16",
        paramList: [],
        url: "https://docs.rubocop.org/rubocop/1.50/cops_style.html#styleinpatternthen",
    },
    {
        id: "Style/InfiniteLoop",
        enabled: true,
        descEn: "Use Kernel#loop for infinite loops. This cop is unsafe if the body may raise a `StopIteration` exception.",
        descCn: "",
        versionAdded: "0.26",
        versionChanged: "0.61",
        paramList: [],
        url: "https://docs.rubocop.org/rubocop/1.50/cops_style.html#styleinfiniteloop",
    },
    {
        id: "Style/InlineComment",
        enabled: false,
        descEn: "Avoid trailing inline comments.",
        descCn: "",
        versionAdded: "0.23",
        paramList: [],
        url: "https://docs.rubocop.org/rubocop/1.50/cops_style.html#styleinlinecomment",
    },
    {
        id: "Style/InverseMethods",
        enabled: true,
        descEn: "Use the inverse method instead of `!.method` if an inverse method is defined.",
        descCn: "",
        versionAdded: "0.48",
        paramList: [
            {
                param: "InverseMethods",
                defaultValue: { ":any?": ":none?", ":even?": ":odd?", ":==": ":!=", ":=": ":!", ":<": ":>=", ":>": ":<=" },
                validValue: (value: unknown) => {
                    if (typeof value != "object") {
                        return "值必须是对象";
                    }
                    for (const v of Object.values(value as Object)) {
                        if (typeof v !== "string") {
                            return "对象值必须是字符串";
                        }
                    }
                    return null;
                }
            },
            {
                param: "InverseBlocks",
                defaultValue: { ":select": ":reject", ":select!": ":reject!" },
                validValue: (value: unknown) => {
                    if (typeof value != "object") {
                        return "值必须是对象";
                    }
                    for (const v of Object.values(value as Object)) {
                        if (typeof v !== "string") {
                            return "对象值必须是字符串";
                        }
                    }
                    return null;
                }
            }
        ],
        url: "https://docs.rubocop.org/rubocop/1.50/cops_style.html#styleinversemethods",
    },
    {
        id: "Style/InvertibleUnlessCondition",
        enabled: false,
        descEn: "Favor `if` with inverted condition over `unless`.",
        descCn: "",
        versionAdded: "1.44",
        versionChanged: "1.50",
        paramList: [
            {
                param: "InverseMethods",
                defaultValue: { ":!=": ":==", ":>": ":<=", ":<=": ":>", ":<": ":>=", ":>=": ":<", ":!": ":=", ":zero?": ":nonzero?", ":nonzero?": ":zero?", ":any?": ":none?", ":none?": ":any?", ":even?": ":odd?", ":odd?": ":even?" },
                validValue: (value: unknown) => {
                    if (typeof value != "object") {
                        return "值必须是对象";
                    }
                    for (const v of Object.values(value as Object)) {
                        if (typeof v !== "string") {
                            return "对象值必须是字符串";
                        }
                    }
                    return null;
                }
            }
        ],
        url: "https://docs.rubocop.org/rubocop/1.50/cops_style.html#styleinvertibleunlesscondition",
    },
    {
        id: "Style/IpAddresses",
        enabled: false,
        descEn: "Don't include literal IP addresses in code.",
        descCn: "",
        versionAdded: "0.58",
        versionChanged: "0.91 ",
        paramList: [
            {
                param: "AllowedAddresses",
                defaultValue: ["::"],
            },
            {
                param: "Exclude",
                defaultValue: ["**/*.gemfile", "**/Gemfile", "**/gems.rb", "**/*.gemspec"],
            }
        ],
        url: "https://docs.rubocop.org/rubocop/1.50/cops_style.html#styleipaddresses",
    },
    {
        id: "Style/KeywordParametersOrder",
        enabled: true,
        descEn: "Enforces that optional keyword parameters are placed at the end of the parameters list.",
        descCn: "",
        versionAdded: "0.90",
        versionChanged: "1.7",
        paramList: [],
        url: "https://docs.rubocop.org/rubocop/1.50/cops_style.html#stylekeywordparametersorder",
    },
    {
        id: "Style/Lambda",
        enabled: true,
        descEn: "Use the new lambda literal syntax for single-line blocks.",
        descCn: "",
        versionAdded: "0.9",
        versionChanged: "0.40",
        paramList: [
            {
                param: "EnforcedStyle",
                defaultValue: "line_count_dependent",
                optionList: ["line_count_dependent", "lambda", "literal"],
            }
        ],
        url: "https://docs.rubocop.org/rubocop/1.50/cops_style.html#stylelambda",
    },
    {
        id: "Style/LambdaCall",
        enabled: true,
        descEn: "Use lambda.call(...) instead of lambda.(...).",
        descCn: "",
        versionAdded: "0.13",
        versionChanged: "0.14",
        paramList: [
            {
                param: "EnforcedStyle",
                defaultValue: "call",
                optionList: ["call", "braces"],
            }
        ],
        url: "https://docs.rubocop.org/rubocop/1.50/cops_style.html#stylelambdacall",
    },
    {
        id: "Style/LineEndConcatenation",
        enabled: true,
        descEn: "Use \ instead of + or << to concatenate two string literals at line end.",
        descCn: "",
        versionAdded: "0.18",
        versionChanged: "0.64",
        paramList: [],
        url: "https://docs.rubocop.org/rubocop/1.50/cops_style.html#stylelineendconcatenation",
    },
    {
        id: "Style/MagicCommentFormat",
        enabled: "pending",
        descEn: "Use a consistent style for magic comments.",
        descCn: "",
        versionAdded: "1.35",
        paramList: [
            {
                param: "EnforcedStyle",
                defaultValue: "snake_case",
                optionList: ["snake_case", "kebab_case"],
            },
            {
                param: "DirectiveCapitalization",
                defaultValue: "lowercase",
                optionList: [null, "lowercase", "uppercase"],
            },
            {
                param: "ValueCapitalization",
                defaultValue: null,
                optionList: [null, "lowercase", "uppercase"],
            }
        ],
        url: "https://docs.rubocop.org/rubocop/1.50/cops_style.html#stylemagiccommentformat",
    },
    {
        id: "Style/MapCompactWithConditionalBlock",
        enabled: "pending",
        descEn: "Prefer `select` or `reject` over `map { ... }.compact`.",
        descCn: "",
        versionAdded: "1.30",
        paramList: [],
        url: "https://docs.rubocop.org/rubocop/1.50/cops_style.html#stylemapcompactwithconditionalblock",
    },
    {
        id: "Style/MapToHash",
        enabled: "pending",
        descEn: "Prefer `to_h` with a block over `map.to_h`.",
        descCn: "",
        versionAdded: "1.24",
        paramList: [],
        url: "https://docs.rubocop.org/rubocop/1.50/cops_style.html#stylemaptohash",
    },
    {
        id: "Style/MapToSet",
        enabled: "pending",
        descEn: "Prefer `to_set` with a block over `map.to_set`.",
        descCn: "",
        versionAdded: "1.42",
        paramList: [],
        url: "https://docs.rubocop.org/rubocop/1.50/cops_style.html#stylemaptoset",
    },
    {
        id: "Style/MethodCallWithArgsParentheses",
        enabled: false,
        descEn: "Use parentheses for method calls with arguments.",
        descCn: "",
        versionAdded: "0.47",
        versionChanged: "1.7",
        paramList: [
            {
                param: "IgnoreMacros",
                defaultValue: true,
            },
            {
                param: "AllowedMethods",
                defaultValue: [],
            },
            {
                param: "AllowedPatterns",
                defaultValue: [],
            },
            {
                param: "IncludedMacros",
                defaultValue: [],
            },
            {
                param: "AllowParenthesesInMultilineCall",
                defaultValue: false,
            },
            {
                param: "AllowParenthesesInChaining",
                defaultValue: false,
            },
            {
                param: "AllowParenthesesInCamelCaseMethod",
                defaultValue: false,
            },
            {
                param: "AllowParenthesesInStringInterpolation",
                defaultValue: false,
            },
            {
                param: "EnforcedStyle",
                defaultValue: "require_parentheses",
                optionList: ["require_parentheses", "omit_parentheses"],
            }
        ],
        url: "https://docs.rubocop.org/rubocop/1.50/cops_style.html#stylemethodcallwithargsparentheses",
    },
    {
        id: "Style/MethodCallWithoutArgsParentheses",
        enabled: true,
        descEn: "Do not use parentheses for method calls with no arguments.",
        descCn: "",
        versionAdded: "0.47",
        versionChanged: "0.55",
        paramList: [
            {
                param: "AllowedMethods",
                defaultValue: [],
            },
            {
                param: "AllowedPatterns",
                defaultValue: [],
            }
        ],
        url: "https://docs.rubocop.org/rubocop/1.50/cops_style.html#stylemethodcallwithoutargsparentheses",
    },
    {
        id: "Style/MethodCalledOnDoEndBlock",
        enabled: false,
        descEn: "Avoid chaining a method call on a do...end block.",
        descCn: "",
        versionAdded: "0.14",
        paramList: [],
        url: "https://docs.rubocop.org/rubocop/1.50/cops_style.html#stylemethodcalledondoendblock",
    },
    {
        id: "Style/MethodDefParentheses",
        enabled: true,
        descEn: "Checks if the method definitions have or don't have parentheses.",
        descCn: "",
        versionAdded: "0.16",
        versionChanged: "1.7",
        paramList: [
            {
                param: "EnforcedStyle",
                defaultValue: "require_parentheses",
                optionList: ["require_parentheses", "require_no_parentheses", "require_no_parentheses_except_multiline"],
            }
        ],
        url: "https://docs.rubocop.org/rubocop/1.50/cops_style.html#stylemethoddefparentheses",
    },
    {
        id: "Style/MinMax",
        enabled: true,
        descEn: "Use `Enumerable#minmax` instead of `Enumerable#min` and `Enumerable#max` in conjunction.",
        descCn: "",
        versionAdded: "0.50",
        paramList: [],
        url: "https://docs.rubocop.org/rubocop/1.50/cops_style.html#styleminmax",
    },
    {
        id: "Style/MinMaxComparison",
        enabled: "pending",
        descEn: "Enforces the use of `max` or `min` instead of comparison for greater or less.",
        descCn: "",
        versionAdded: "1.42",
        paramList: [],
        url: "https://docs.rubocop.org/rubocop/1.50/cops_style.html#styleminmaxcomparison",
    },
    {
        id: "Style/MissingElse",
        enabled: false,
        descEn: `Require if/case expressions to have an else branches. If enabled, it is recommended that Style/UnlessElse and Style/EmptyElse be enabled. This will conflict with Style/EmptyElse if Style/EmptyElse is configured to style "both".`,
        descCn: "",
        versionAdded: "0.30",
        versionChanged: "0.38",
        paramList: [
            {
                param: "EnforcedStyle",
                defaultValue: "both",
                optionList: ["if", "case", "both"],
            }
        ],
        url: "https://docs.rubocop.org/rubocop/1.50/cops_style.html#stylemissingelse",
    },
    {
        id: "Style/MissingRespondToMissing",
        enabled: true,
        descEn: "Checks if `method_missing` is implemented without implementing `respond_to_missing`.",
        descCn: "",
        versionAdded: "0.56",
        paramList: [],
        url: "https://docs.rubocop.org/rubocop/1.50/cops_style.html#stylemissingrespondtomissing",
    },
    {
        id: "Style/MixinGrouping",
        enabled: true,
        descEn: "Checks for grouping of mixins in `class` and `module` bodies.",
        descCn: "",
        versionAdded: "0.48",
        versionChanged: "0.49",
        paramList: [
            {
                param: "EnforcedStyle",
                defaultValue: "separated",
                optionList: ["separated", "grouped"],
            }
        ],
        url: "https://docs.rubocop.org/rubocop/1.50/cops_style.html#stylemixingrouping",
    },
    {
        id: "Style/MixinUsage",
        enabled: true,
        descEn: "Checks that `include`, `extend` and `prepend` exists at the top level.",
        descCn: "",
        versionAdded: "0.51",
        paramList: [],
        url: "https://docs.rubocop.org/rubocop/1.50/cops_style.html#stylemixinusage",
    },
    {
        id: "Style/ModuleFunction",
        enabled: true,
        descEn: "Checks for usage of `extend self` in modules.",
        descCn: "",
        versionAdded: "0.11",
        versionChanged: "0.65",
        paramList: [
            {
                param: "EnforcedStyle",
                defaultValue: "module_function",
                optionList: ["module_function", "extend_self", "forbidden"],
            },
            {
                param: "Autocorrect",
                defaultValue: false,
            }
        ],
        url: "https://docs.rubocop.org/rubocop/1.50/cops_style.html#stylemodulefunction",
    },
    {
        id: "Style/MultilineBlockChain",
        enabled: true,
        descEn: "Avoid multi-line chains of blocks.",
        descCn: "",
        versionAdded: "0.13",
        paramList: [],
        url: "https://docs.rubocop.org/rubocop/1.50/cops_style.html#stylemultilineblockchain",
    },
    {
        id: "Style/MultilineIfModifier",
        enabled: true,
        descEn: "Only use if/unless modifiers on single line statements.",
        descCn: "",
        versionAdded: "0.45",
        paramList: [],
        url: "https://docs.rubocop.org/rubocop/1.50/cops_style.html#stylemultilineifmodifier",
    },
    {
        id: "Style/MultilineIfThen",
        enabled: true,
        descEn: "Do not use then for multi-line if/unless.",
        descCn: "",
        versionAdded: "0.9",
        versionChanged: "0.26",
        paramList: [],
        url: "https://docs.rubocop.org/rubocop/1.50/cops_style.html#stylemultilineifthen",
    },
    {
        id: "Style/MultilineInPatternThen",
        enabled: "pending",
        descEn: "Do not use `then` for multi-line `in` statement",
        descCn: "",
        versionAdded: "1.16",
        paramList: [],
        url: "https://docs.rubocop.org/rubocop/1.50/cops_style.html#stylemultilineinpatternthen",
    },
    {
        id: "Style/MultilineMemoization",
        enabled: true,
        descEn: "Wrap multiline memoizations in a `begin` and `end` block.",
        descCn: "",
        versionAdded: "0.44",
        versionChanged: "0.48",
        paramList: [
            {
                param: "EnforcedStyle",
                defaultValue: "keyword",
                optionList: ["keyword", "braces"],
            }
        ],
        url: "https://docs.rubocop.org/rubocop/1.50/cops_style.html#stylemultilinememoization",
    },
    {
        id: "Style/MultilineMethodSignature",
        enabled: false,
        descEn: "Avoid multi-line method signatures.",
        descCn: "",
        versionAdded: "0.59",
        versionChanged: "1.7",
        paramList: [],
        url: "https://docs.rubocop.org/rubocop/1.50/cops_style.html#stylemultilinemethodsignature",
    },
    {
        id: "Style/MultilineTernaryOperator",
        enabled: true,
        descEn: "Avoid multi-line ?: (the ternary operator); use if/unless instead.",
        descCn: "",
        versionAdded: "0.9",
        versionChanged: "0.86",
        paramList: [],
        url: "https://docs.rubocop.org/rubocop/1.50/cops_style.html#stylemultilineternaryoperator",
    },
    {
        id: "Style/MultilineWhenThen",
        enabled: true,
        descEn: "Do not use then for multi-line when statement.",
        descCn: "",
        versionAdded: "0.73",
        paramList: [],
        url: "https://docs.rubocop.org/rubocop/1.50/cops_style.html#stylemultilinewhenthen",
    },
    {
        id: "Style/MultipleComparison",
        enabled: true,
        descEn: "Avoid comparing a variable with multiple items in a conditional, use Array#include? instead.",
        descCn: "",
        versionAdded: "0.49",
        versionChanged: "1.1",
        paramList: [
            {
                param: "AllowMethodComparison",
                defaultValue: true,
            }
        ],
        url: "https://docs.rubocop.org/rubocop/1.50/cops_style.html#stylemultiplecomparison",
    },
    {
        id: "Style/MutableConstant",
        enabled: true,
        descEn: "Do not assign mutable objects to constants.",
        descCn: "",
        versionAdded: "0.34",
        versionChanged: "1.8",
        paramList: [
            {
                param: "EnforcedStyle",
                defaultValue: "literals",
                optionList: ["literals", "strict"],
            }
        ],
        url: "https://docs.rubocop.org/rubocop/1.50/cops_style.html#stylemutableconstant",
    },
    {
        id: "Style/NegatedIf",
        enabled: true,
        descEn: "Favor unless over if for negative conditions (or control flow or).",
        descCn: "",
        versionAdded: "0.20",
        versionChanged: "0.48",
        paramList: [
            {
                param: "EnforcedStyle",
                defaultValue: "both",
                optionList: ["both", "prefix", "postfix"],
            }
        ],
        url: "https://docs.rubocop.org/rubocop/1.50/cops_style.html#stylenegatedif",
    },
    {
        id: "Style/NegatedIfElseCondition",
        enabled: "pending",
        descEn: "Checks for uses of `if-else` and ternary operators with a negated condition which can be simplified by inverting condition and swapping branches.",
        descCn: "",
        versionAdded: "1.2",
        paramList: [],
        url: "https://docs.rubocop.org/rubocop/1.50/cops_style.html#stylenegatedifelsecondition",
    },
    {
        id: "Style/NegatedUnless",
        enabled: true,
        descEn: "Favor if over unless for negative conditions.",
        descCn: "",
        versionAdded: "0.69",
        paramList: [
            {
                param: "EnforcedStyle",
                defaultValue: "both",
                optionList: ["both", "prefix", "postfix"],
            }
        ],
        url: "https://docs.rubocop.org/rubocop/1.50/cops_style.html#stylenegatedunless",
    },
    {
        id: "Style/NegatedWhile",
        enabled: true,
        descEn: "Favor until over while for negative conditions.",
        descCn: "",
        versionAdded: "0.20",
        paramList: [],
        url: "https://docs.rubocop.org/rubocop/1.50/cops_style.html#stylenegatedwhile",
    },
    {
        id: "Style/NestedFileDirname",
        enabled: "pending",
        descEn: "Checks for nested `File.dirname`.",
        descCn: "",
        versionAdded: "1.26",
        paramList: [],
        url: "https://docs.rubocop.org/rubocop/1.50/cops_style.html#stylenestedfiledirname",
    },
    {
        id: "Style/NestedModifier",
        enabled: true,
        descEn: "Avoid using nested modifiers.",
        descCn: "",
        versionAdded: "0.35",
        paramList: [],
        url: "https://docs.rubocop.org/rubocop/1.50/cops_style.html#stylenestedmodifier",
    },
    {
        id: "Style/NestedParenthesizedCalls",
        enabled: true,
        descEn: "Parenthesize method calls which are nested inside the argument list of another parenthesized method call.",
        descCn: "",
        versionAdded: "0.36",
        versionChanged: "0.77",
        paramList: [
            {
                param: "AllowedMethods",
                defaultValue: ["be", "be_a", "be_an", "be_between", "be_falsey", "be_kind_of", "be_instance_of", "be_truthy", "be_within", "eq", "eql", "end_with", "include", "match", "raise_error", "respond_to", "start_with"],
            }
        ],
        url: "https://docs.rubocop.org/rubocop/1.50/cops_style.html#stylenestedparenthesizedcalls",
    },
    {
        id: "Style/NestedTernaryOperator",
        enabled: true,
        descEn: "Use one expression per branch in a ternary operator.",
        descCn: "",
        versionAdded: "0.9",
        versionChanged: "0.86",
        paramList: [],
        url: "https://docs.rubocop.org/rubocop/1.50/cops_style.html#stylenestedternaryoperator",
    },
    {
        id: "Style/Next",
        enabled: true,
        descEn: "Use `next` to skip iteration instead of a condition at the end.",
        descCn: "",
        versionAdded: "0.22",
        versionChanged: "0.35",
        paramList: [
            {
                param: "EnforcedStyle",
                defaultValue: "skip_modifier_ifs",
                optionList: ["skip_modifier_ifs", "always"],
            }
        ],
        url: "https://docs.rubocop.org/rubocop/1.50/cops_style.html#stylenext",
    },
    {
        id: "Style/NilComparison",
        enabled: true,
        descEn: "Prefer x.nil? to x == nil.",
        descCn: "",
        versionAdded: "0.12",
        versionChanged: "0.59",
        paramList: [
            {
                param: "EnforcedStyle",
                defaultValue: "predicate",
                optionList: ["predicate", "comparison"],
            }
        ],
        url: "https://docs.rubocop.org/rubocop/1.50/cops_style.html#stylenilcomparison",
    },
    {
        id: "Style/NilLambda",
        enabled: "pending",
        descEn: "Prefer `-> {}` to `-> { nil }`.",
        descCn: "",
        versionAdded: "1.3",
        versionChanged: "1.15",
        paramList: [],
        url: "https://docs.rubocop.org/rubocop/1.50/cops_style.html#stylenillambda",
    },
    {
        id: "Style/NonNilCheck",
        enabled: true,
        descEn: "Checks for redundant nil checks.",
        descCn: "",
        versionAdded: "0.20",
        versionChanged: "0.22",
        paramList: [
            {
                param: "IncludeSemanticChanges",
                defaultValue: false,
            }
        ],
        url: "https://docs.rubocop.org/rubocop/1.50/cops_style.html#stylenonnilcheck",
    },
    {
        id: "Style/Not",
        enabled: true,
        descEn: "Use ! instead of not.",
        descCn: "",
        versionAdded: "0.9",
        versionChanged: "0.20",
        paramList: [],
        url: "https://docs.rubocop.org/rubocop/1.50/cops_style.html#stylenot",
    },
    {
        id: "Style/NumberedParameters",
        enabled: "pending",
        descEn: "Restrict the usage of numbered parameters.",
        descCn: "",
        versionAdded: "1.22",
        paramList: [
            {
                param: "EnforcedStyle",
                defaultValue: "allow_single_line",
                optionList: ["allow_single_line", "disallow"],
            }
        ],
        url: "https://docs.rubocop.org/rubocop/1.50/cops_style.html#stylenumberedparameters",
    },
    {
        id: "Style/NumberedParametersLimit",
        enabled: "pending",
        descEn: "Avoid excessive numbered params in a single block.",
        descCn: "",
        versionAdded: "",
        versionChanged: "",
        paramList: [
            {
                param: "Max",
                defaultValue: 1,
            }
        ],
        url: "https://docs.rubocop.org/rubocop/1.50/cops_style.html#stylenumberedparameterslimit",
    },
    {
        id: "Style/NumericLiteralPrefix",
        enabled: true,
        descEn: "Use smallcase prefixes for numeric literals.",
        descCn: "",
        versionAdded: "0.41",
        paramList: [
            {
                param: "EnforcedOctalStyle",
                defaultValue: "zero_with_o",
                optionList: ["zero_with_o", "zero_only"],
            }
        ],
        url: "https://docs.rubocop.org/rubocop/1.50/cops_style.html#stylenumericliteralprefix",
    },
    {
        id: "Style/NumericLiterals",
        enabled: true,
        descEn: "Add underscores to large numeric literals to improve their readability.",
        descCn: "",
        versionAdded: "0.9",
        versionChanged: "0.48",
        paramList: [
            {
                param: "MinDigits",
                defaultValue: 5,
            },
            {
                param: "Strict",
                defaultValue: false,
            },
            {
                param: "AllowedNumbers",
                defaultValue: [],
            },
            {
                param: "AllowedPatterns",
                defaultValue: [],
            }
        ],
        url: "https://docs.rubocop.org/rubocop/1.50/cops_style.html#stylenumericliterals",
    },
    {
        id: "Style/NumericPredicate",
        enabled: true,
        descEn: "Checks for the use of predicate- or comparison methods for numeric comparisons.",
        descCn: "",
        versionAdded: "0.42",
        versionChanged: "0.59",
        paramList: [
            {
                param: "EnforcedStyle",
                defaultValue: "predicate",
                optionList: ["predicate", "comparison"],
            },
            {
                param: "AllowedMethods",
                defaultValue: [],
            },
            {
                param: "AllowedPatterns",
                defaultValue: [],
            },
            {
                param: "Exclude",
                defaultValue: ["spec/**/*"],
            }
        ],
        url: "https://docs.rubocop.org/rubocop/1.50/cops_style.html#stylenumericpredicate",
    },
    {
        id: "Style/ObjectThen",
        enabled: "pending",
        descEn: "Enforces the use of consistent method names `Object#yield_self` or `Object#then`.",
        descCn: "",
        versionAdded: "1.28",
        paramList: [
            {
                param: "EnforcedStyle",
                defaultValue: "then",
                optionList: ["then", "yield_self"],
            }
        ],
        url: "https://docs.rubocop.org/rubocop/1.50/cops_style.html#styleobjectthen",
    },
    {
        id: "Style/OneLineConditional",
        enabled: true,
        descEn: "Favor the ternary operator (?:) or multi-line constructs over single-line if/then/else/end constructs.",
        descCn: "",
        versionAdded: "0.9",
        versionChanged: "0.90",
        paramList: [
            {
                param: "AlwaysCorrectToMultiline",
                defaultValue: false,
            }
        ],
        url: "https://docs.rubocop.org/rubocop/1.50/cops_style.html#styleonelineconditional",
    },
    {
        id: "Style/OpenStructUse",
        enabled: "pending",
        descEn: "Avoid using OpenStruct. As of Ruby 3.0, use is officially discouraged due to performance, version compatibility, and potential security issues.",
        descCn: "",
        versionAdded: "1.23",
        paramList: [],
        url: "https://docs.rubocop.org/rubocop/1.50/cops_style.html#styleopenstructuse",
    },
    {
        id: "Style/OperatorMethodCall",
        enabled: "pending",
        descEn: "Checks for redundant dot before operator method call.",
        descCn: "",
        versionAdded: "1.37",
        paramList: [],
        url: "https://docs.rubocop.org/rubocop/1.50/cops_style.html#styleoperatormethodcall",
    },
    {
        id: "Style/OptionHash",
        enabled: false,
        descEn: "Don't use option hashes when you can use keyword arguments.",
        descCn: "",
        versionAdded: "0.33",
        versionChanged: "0.34",
        paramList: [
            {
                param: "SuspiciousParamNames",
                defaultValue: ["options", "opts", "args", "params", "parameters"],
            },
            {
                param: "Allowlist",
                defaultValue: [],
            }
        ],
        url: "https://docs.rubocop.org/rubocop/1.50/cops_style.html#styleoptionhash",
    },
    {
        id: "Style/OptionalArguments",
        enabled: true,
        descEn: "Checks for optional arguments that do not appear at the end of the argument list.",
        descCn: "",
        versionAdded: "0.33",
        versionChanged: "0.83",
        paramList: [],
        url: "https://docs.rubocop.org/rubocop/1.50/cops_style.html#styleoptionalarguments",
    },
    {
        id: "Style/OptionalBooleanParameter",
        enabled: true,
        descEn: "Use keyword arguments when defining method with boolean argument.",
        descCn: "",
        versionAdded: "0.89",
        paramList: [
            {
                param: "AllowedMethods",
                defaultValue: ["respond_to_missing?"],
            }
        ],
        url: "https://docs.rubocop.org/rubocop/1.50/cops_style.html#styleoptionalbooleanparameter",
    },
    {
        id: "Style/OrAssignment",
        enabled: true,
        descEn: "Recommend usage of double pipe equals (||=) where applicable.",
        descCn: "",
        versionAdded: "0.50",
        paramList: [],
        url: "https://docs.rubocop.org/rubocop/1.50/cops_style.html#styleorassignment",
    },
    {
        id: "Style/ParallelAssignment",
        enabled: true,
        descEn: "Check for simple usages of parallel assignment. It will only warn when the number of variables matches on both sides of the assignment.",
        descCn: "",
        versionAdded: "0.32",
        paramList: [],
        url: "https://docs.rubocop.org/rubocop/1.50/cops_style.html#styleparallelassignment",
    },
    {
        id: "Style/ParenthesesAroundCondition",
        enabled: true,
        descEn: "Don't use parentheses around the condition of an if/unless/while.",
        descCn: "",
        versionAdded: "0.9",
        versionChanged: "0.56",
        paramList: [
            {
                param: "AllowSafeAssignment",
                defaultValue: true,
            },
            {
                param: "AllowInMultilineConditions",
                defaultValue: false,
            }
        ],
        url: "https://docs.rubocop.org/rubocop/1.50/cops_style.html#styleparenthesesaroundcondition",
    },
    {
        id: "Style/PercentLiteralDelimiters",
        enabled: true,
        descEn: "Use `%`-literal delimiters consistently.",
        descCn: "",
        versionAdded: "0.19",
        paramList: [
            {
                param: "PreferredDelimiters",
                defaultValue: { "default": "()", "%i": "[]", "%I": "[]", "%r": "{}", "%w": "[]", "%W": "[]" },
                validValue: (value: unknown) => {
                    if (typeof value != "object") {
                        return "值必须是对象";
                    }
                    for (const v of Object.values(value as Object)) {
                        if (typeof v !== "string") {
                            return "对象值必须是字符串";
                        }
                    }
                    return null;
                }
            }
        ],
        url: "https://docs.rubocop.org/rubocop/1.50/cops_style.html#stylepercentliteraldelimiters",
    },
    {
        id: "Style/PercentQLiterals",
        enabled: true,
        descEn: "Checks if uses of %Q/%q match the configured preference.",
        descCn: "",
        versionAdded: "0.25",
        paramList: [
            {
                param: "EnforcedStyle",
                defaultValue: "lower_case_q",
                optionList: ["lower_case_q", "upper_case_q"],
            }
        ],
        url: "https://docs.rubocop.org/rubocop/1.50/cops_style.html#stylepercentqliterals",
    },
    {
        id: "Style/PerlBackrefs",
        enabled: true,
        descEn: "Avoid Perl-style regex back references.",
        descCn: "",
        versionAdded: "0.13",
        paramList: [],
        url: "https://docs.rubocop.org/rubocop/1.50/cops_style.html#styleperlbackrefs",
    },
    {
        id: "Style/PreferredHashMethods",
        enabled: true,
        descEn: "Checks use of `has_key?` and `has_value?` Hash methods.",
        descCn: "",
        versionAdded: "0.41",
        versionChanged: "0.70",
        paramList: [
            {
                param: "EnforcedStyle",
                defaultValue: "short",
                optionList: ["short", "verbose"],
            }
        ],
        url: "https://docs.rubocop.org/rubocop/1.50/cops_style.html#stylepreferredhashmethods",
    },
    {
        id: "Style/Proc",
        enabled: true,
        descEn: "Use proc instead of Proc.new.",
        descCn: "",
        versionAdded: "0.9",
        versionChanged: "0.18",
        paramList: [],
        url: "https://docs.rubocop.org/rubocop/1.50/cops_style.html#styleproc",
    },
    {
        id: "Style/QuotedSymbols",
        enabled: "pending",
        descEn: "Use a consistent style for quoted symbols.",
        descCn: "",
        versionAdded: "1.16",
        versionChanged: "",
        paramList: [
            {
                param: "EnforcedStyle",
                defaultValue: "same_as_string_literals",
                optionList: ["same_as_string_literals", "single_quotes", "double_quotes"],
            }
        ],
        url: "https://docs.rubocop.org/rubocop/1.50/cops_style.html#stylequotedsymbols",
    },
    {
        id: "Style/RaiseArgs",
        enabled: true,
        descEn: "Checks the arguments passed to raise/fail.",
        descCn: "",
        versionAdded: "0.14",
        versionChanged: "1.2",
        paramList: [
            {
                param: "EnforcedStyle",
                defaultValue: "exploded",
                optionList: ["compact", "exploded"],
            },
            {
                param: "AllowedCompactTypes",
                defaultValue: [],
            }
        ],
        url: "https://docs.rubocop.org/rubocop/1.50/cops_style.html#styleraiseargs",
    },
    {
        id: "Style/RandomWithOffset",
        enabled: true,
        descEn: "Prefer to use ranges when generating random numbers instead of integers with offsets.",
        descCn: "",
        versionAdded: "0.52",
        paramList: [],
        url: "https://docs.rubocop.org/rubocop/1.50/cops_style.html#stylerandomwithoffset",
    },
    {
        id: "Style/RedundantArgument",
        enabled: "pending",
        descEn: "Check for a redundant argument passed to certain methods.",
        descCn: "",
        versionAdded: "1.4",
        versionChanged: "1.40",
        paramList: [
            {
                param: "Methods",
                defaultValue: { "join": "", "sum": 0, "split": " ", "chomp": "\n", "chomp!": "\n" },
                validValue: (value: unknown) => {
                    if (typeof value != "object") {
                        return "值必须是对象";
                    }
                    return null;
                },
            }
        ],
        url: "https://docs.rubocop.org/rubocop/1.50/cops_style.html#styleredundantargument",
    },
    {
        id: "Style/RedundantAssignment",
        enabled: true,
        descEn: "Checks for redundant assignment before returning.",
        descCn: "",
        versionAdded: "0.87",
        paramList: [],
        url: "https://docs.rubocop.org/rubocop/1.50/cops_style.html#styleredundantassignment",
    },
    {
        id: "Style/RedundantBegin",
        enabled: true,
        descEn: "Don't use begin blocks when they are not needed.",
        descCn: "",
        versionAdded: "0.10",
        versionChanged: "0.21",
        paramList: [],
        url: "https://docs.rubocop.org/rubocop/1.50/cops_style.html#styleredundantbegin",
    },
    {
        id: "Style/RedundantCapitalW",
        enabled: true,
        descEn: "Checks for %W when interpolation is not needed.",
        descCn: "",
        versionAdded: "0.76",
        paramList: [],
        url: "https://docs.rubocop.org/rubocop/1.50/cops_style.html#styleredundantcapitalw",
    },
    {
        id: "Style/RedundantCondition",
        enabled: true,
        descEn: "Checks for unnecessary conditional expressions.",
        descCn: "",
        versionAdded: "0.76",
        paramList: [],
        url: "https://docs.rubocop.org/rubocop/1.50/cops_style.html#styleredundantcondition",
    },
    {
        id: "Style/RedundantConditional",
        enabled: true,
        descEn: "Don't return true/false from a conditional.",
        descCn: "",
        versionAdded: "0.50",
        paramList: [],
        url: "https://docs.rubocop.org/rubocop/1.50/cops_style.html#styleredundantconditional",
    },
    {
        id: "Style/RedundantConstantBase",
        enabled: "pending",
        descEn: "Avoid redundant `::` prefix on constant.",
        descCn: "",
        versionAdded: "1.40",
        paramList: [],
        url: "https://docs.rubocop.org/rubocop/1.50/cops_style.html#styleredundantconstantbase",
    },
    {
        id: "Style/RedundantDoubleSplatHashBraces",
        enabled: "pending",
        descEn: "Checks for redundant uses of double splat hash braces.",
        descCn: "",
        versionAdded: "1.41",
        paramList: [],
        url: "https://docs.rubocop.org/rubocop/1.50/cops_style.html#styleredundantdoublesplathashbraces",
    },
    {
        id: "Style/RedundantEach",
        enabled: "pending",
        descEn: "Checks for redundant `each`.",
        descCn: "",
        versionAdded: "1.38",
        paramList: [],
        url: "https://docs.rubocop.org/rubocop/1.50/cops_style.html#styleredundanteach",
    },
    {
        id: "Style/RedundantException",
        enabled: true,
        descEn: "Checks for an obsolete RuntimeException argument in raise/fail.",
        descCn: "",
        versionAdded: "0.14",
        versionChanged: "0.29",
        paramList: [],
        url: "https://docs.rubocop.org/rubocop/1.50/cops_style.html#styleredundantexception",
    },
    {
        id: "Style/RedundantFetchBlock",
        enabled: true,
        descEn: "Use `fetch(key, value)` instead of `fetch(key) { value }` when value has Numeric, Rational, Complex, Symbol or String type, `false`, `true`, `nil` or is a constant.",
        descCn: "",
        versionAdded: "0.86",
        paramList: [
            {
                param: "SafeForConstants",
                defaultValue: false,
            }
        ],
        url: "https://docs.rubocop.org/rubocop/1.50/cops_style.html#styleredundantfetchblock",
    },
    {
        id: "Style/RedundantFileExtensionInRequire",
        enabled: true,
        descEn: "Checks for the presence of superfluous `.rb` extension in the filename provided to `require` and `require_relative`.",
        descCn: "",
        versionAdded: "0.88",
        paramList: [],
        url: "https://docs.rubocop.org/rubocop/1.50/cops_style.html#styleredundantfileextensioninrequire",
    },
    {
        id: "Style/RedundantFreeze",
        enabled: true,
        descEn: "Checks usages of Object#freeze on immutable objects.",
        descCn: "",
        versionAdded: "0.34",
        versionChanged: "0.66",
        paramList: [],
        url: "https://docs.rubocop.org/rubocop/1.50/cops_style.html#styleredundantfreeze",
    },
    {
        id: "Style/RedundantHeredocDelimiterQuotes",
        enabled: "pending",
        descEn: "Checks for redundant heredoc delimiter quotes.",
        descCn: "",
        versionAdded: "1.45",
        versionChanged: "",
        paramList: [],
        url: "https://docs.rubocop.org/rubocop/1.50/cops_style.html#styleredundantheredocdelimiterquotes",
    },
    {
        id: "Style/RedundantInitialize",
        enabled: "pending",
        descEn: "Checks for redundant `initialize` methods.",
        descCn: "",
        versionAdded: "1.27",
        versionChanged: "1.28",
        paramList: [
            {
                param: "AllowComments",
                defaultValue: true,
            }
        ],
        url: "https://docs.rubocop.org/rubocop/1.50/cops_style.html#styleredundantinitialize",
    },
    {
        id: "Style/RedundantInterpolation",
        enabled: true,
        descEn: "Checks for strings that are just an interpolated expression.",
        descCn: "",
        versionAdded: "0.76",
        versionChanged: "1.30",
        paramList: [],
        url: "https://docs.rubocop.org/rubocop/1.50/cops_style.html#styleredundantinterpolation",
    },
    {
        id: "Style/RedundantLineContinuation",
        enabled: "pending",
        descEn: "Check for redundant line continuation.",
        descCn: "",
        versionAdded: "1.49",
        paramList: [],
        url: "https://docs.rubocop.org/rubocop/1.50/cops_style.html#styleredundantlinecontinuation",
    },
    {
        id: "Style/RedundantParentheses",
        enabled: true,
        descEn: "Checks for parentheses that seem not to serve any purpose.",
        descCn: "",
        versionAdded: "0.36",
        paramList: [],
        url: "https://docs.rubocop.org/rubocop/1.50/cops_style.html#styleredundantparentheses",
    },
    {
        id: "Style/RedundantPercentQ",
        enabled: true,
        descEn: "Checks for %q/%Q when single quotes or double quotes would do.",
        descCn: "",
        versionAdded: "0.76",
        paramList: [],
        url: "https://docs.rubocop.org/rubocop/1.50/cops_style.html#styleredundantpercentq",
    },
    {
        id: "Style/RedundantRegexpCharacterClass",
        enabled: true,
        descEn: "Checks for unnecessary single-element Regexp character classes.",
        descCn: "",
        versionAdded: "0.85",
        paramList: [],
        url: "https://docs.rubocop.org/rubocop/1.50/cops_style.html#styleredundantregexpcharacterclass",
    },
    {
        id: "Style/RedundantRegexpEscape",
        enabled: true,
        descEn: "Checks for redundant escapes in Regexps.",
        descCn: "",
        versionAdded: "0.85",
        paramList: [],
        url: "https://docs.rubocop.org/rubocop/1.50/cops_style.html#styleredundantregexpescape",
    },
    {
        id: "Style/RedundantReturn",
        enabled: true,
        descEn: "Don't use return where it's not required.",
        descCn: "",
        versionAdded: "0.10",
        versionChanged: "0.14",
        paramList: [
            {
                param: "AllowMultipleReturnValues",
                defaultValue: false,
            }
        ],
        url: "https://docs.rubocop.org/rubocop/1.50/cops_style.html#styleredundantreturn",
    },
    {
        id: "Style/RedundantSelf",
        enabled: true,
        descEn: "Don't use self where it's not needed.",
        descCn: "",
        versionAdded: "0.10",
        versionChanged: "0.13",
        paramList: [],
        url: "https://docs.rubocop.org/rubocop/1.50/cops_style.html#styleredundantself",
    },
    {
        id: "Style/RedundantSelfAssignment",
        enabled: true,
        descEn: "Checks for places where redundant assignments are made for in place modification methods.",
        descCn: "",
        versionAdded: "0.90",
        paramList: [],
        url: "https://docs.rubocop.org/rubocop/1.50/cops_style.html#styleredundantselfassignment",
    },
    {
        id: "Style/RedundantSelfAssignmentBranch",
        enabled: "pending",
        descEn: "Checks for places where conditional branch makes redundant self-assignment.",
        descCn: "",
        versionAdded: "1.19",
        paramList: [],
        url: "https://docs.rubocop.org/rubocop/1.50/cops_style.html#styleredundantselfassignmentbranch",
    },
    {
        id: "Style/RedundantSort",
        enabled: true,
        descEn: "Use `min` instead of `sort.first`, `max_by` instead of `sort_by...last`, etc.",
        descCn: "",
        versionAdded: "0.76",
        versionChanged: "1.22",
        paramList: [],
        url: "https://docs.rubocop.org/rubocop/1.50/cops_style.html#styleredundantsort",
    },
    {
        id: "Style/RedundantSortBy",
        enabled: true,
        descEn: "Use `sort` instead of `sort_by { |x| x }`.",
        descCn: "",
        versionAdded: "0.36",
        paramList: [],
        url: "https://docs.rubocop.org/rubocop/1.50/cops_style.html#styleredundantsortby",
    },
    {
        id: "Style/RedundantStringEscape",
        enabled: "pending",
        descEn: "Checks for redundant escapes in string literals.",
        descCn: "",
        versionAdded: "1.37",
        paramList: [],
        url: "https://docs.rubocop.org/rubocop/1.50/cops_style.html#styleredundantstringescape",
    },
    {
        id: "Style/RegexpLiteral",
        enabled: true,
        descEn: "Use / or %r around regular expressions.",
        descCn: "",
        versionAdded: "0.9",
        versionChanged: "0.30",
        paramList: [
            {
                param: "EnforcedStyle",
                defaultValue: "slashes",
                optionList: ["slashes", "percent_r", "mixed"],
            },
            {
                param: "AllowInnerSlashes",
                defaultValue: false,
            }
        ],
        url: "https://docs.rubocop.org/rubocop/1.50/cops_style.html#styleregexpliteral",
    },
    {
        id: "Style/RequireOrder",
        enabled: false,
        descEn: "Sort `require` and `require_relative` in alphabetical order.",
        descCn: "",
        versionAdded: "1.40",
        paramList: [],
        url: "https://docs.rubocop.org/rubocop/1.50/cops_style.html#stylerequireorder",
    },
    {
        id: "Style/RescueModifier",
        enabled: true,
        descEn: "Avoid using rescue in its modifier form.",
        descCn: "",
        versionAdded: "0.9",
        versionChanged: "0.34",
        paramList: [],
        url: "https://docs.rubocop.org/rubocop/1.50/cops_style.html#stylerescuemodifier",
    },
    {
        id: "Style/RescueStandardError",
        enabled: true,
        descEn: "Avoid rescuing without specifying an error class.",
        descCn: "",
        versionAdded: "0.52",
        paramList: [
            {
                param: "EnforcedStyle",
                defaultValue: "explicit",
                optionList: ["implicit", "explicit"],
            }
        ],
        url: "https://docs.rubocop.org/rubocop/1.50/cops_style.html#stylerescuestandarderror",
    },
    {
        id: "Style/ReturnNil",
        enabled: false,
        descEn: "Use return instead of return nil.",
        descCn: "",
        versionAdded: "0.50",
        paramList: [
            {
                param: "EnforcedStyle",
                defaultValue: "return",
                optionList: ["return", "return_nil"],
            }
        ],
        url: "https://docs.rubocop.org/rubocop/1.50/cops_style.html#stylereturnnil",
    },
    {
        id: "Style/SafeNavigation",
        enabled: true,
        descEn: "Transforms usages of a method call safeguarded by a check for the existence of the object to safe navigation (`&.`). Autocorrection is unsafe as it assumes the object will be `nil` or truthy, but never `false`.",
        descCn: "",
        versionAdded: "0.43",
        versionChanged: "1.27",
        paramList: [
            {
                param: "ConvertCodeThatCanStartToReturnNil",
                defaultValue: false,
            },
            {
                param: "AllowedMethods",
                defaultValue: ["present?", "blank?", "presence", "try", "try!"],
            },
            {
                param: "MaxChainLength",
                defaultValue: 2,
            }
        ],
        url: "https://docs.rubocop.org/rubocop/1.50/cops_style.html#stylesafenavigation",
    },
    {
        id: "Style/Sample",
        enabled: true,
        descEn: "Use `sample` instead of `shuffle.first`, `shuffle.last`, and `shuffle[Integer]`.",
        descCn: "",
        versionAdded: "0.30",
        paramList: [],
        url: "https://docs.rubocop.org/rubocop/1.50/cops_style.html#stylesample",
    },
    {
        id: "Style/SelectByRegexp",
        enabled: "pending",
        descEn: "Prefer grep/grep_v to select/reject with a regexp match.",
        descCn: "",
        versionAdded: "1.22",
        paramList: [],
        url: "https://docs.rubocop.org/rubocop/1.50/cops_style.html#styleselectbyregexp",
    },
    {
        id: "Style/SelfAssignment",
        enabled: true,
        descEn: "Checks for places where self-assignment shorthand should have been used.",
        descCn: "",
        versionAdded: "0.19",
        versionChanged: "0.29",
        paramList: [],
        url: "https://docs.rubocop.org/rubocop/1.50/cops_style.html#styleselfassignment",
    },
    {
        id: "Style/Semicolon",
        enabled: true,
        descEn: "Don't use semicolons to terminate expressions.",
        descCn: "",
        versionAdded: "0.9",
        versionChanged: "0.19",
        paramList: [
            {
                param: "AllowAsExpressionSeparator",
                defaultValue: false,
            }
        ],
        url: "https://docs.rubocop.org/rubocop/1.50/cops_style.html#stylesemicolon",
    },
    {
        id: "Style/Send",
        enabled: false,
        descEn: "Prefer `Object#__send__` or `Object#public_send` to `send`, as `send` may overlap with existing methods.",
        descCn: "",
        versionAdded: "0.33",
        paramList: [],
        url: "https://docs.rubocop.org/rubocop/1.50/cops_style.html#stylesend",
    },
    {
        id: "Style/SignalException",
        enabled: true,
        descEn: "Checks for proper usage of fail and raise.",
        descCn: "",
        versionAdded: "0.11",
        versionChanged: "0.37",
        paramList: [
            {
                param: "EnforcedStyle",
                defaultValue: "only_raise",
                optionList: ["only_raise", "only_fail", "semantic"],
            }
        ],
        url: "https://docs.rubocop.org/rubocop/1.50/cops_style.html#stylesignalexception",
    },
    {
        id: "Style/SingleArgumentDig",
        enabled: true,
        descEn: "Avoid using single argument dig method.",
        descCn: "",
        versionAdded: "0.89",
        paramList: [],
        url: "https://docs.rubocop.org/rubocop/1.50/cops_style.html#stylesingleargumentdig",
    },
    {
        id: "Style/SingleLineBlockParams",
        enabled: false,
        descEn: "Enforces the names of some block params.",
        descCn: "",
        versionAdded: "0.16",
        versionChanged: "1.6",
        paramList: [
            {
                param: "Methods",
                defaultValue: [{ "reduce": ["acc", "elem"] }, { "inject": ["acc", "elem"] }],
                validValue: (value: unknown) => {
                    if (typeof value != "object") {
                        return "值必须是对象";
                    }
                    for (const v of Object.values(value as Object)) {
                        if (!Array.isArray(v)) {
                            return "对象值必须是字符串数组";
                        }
                        for (const av of v) {
                            if (typeof av != "string") {
                                return "对象值必须是字符串数组";
                            }
                        }
                    }
                    return null;
                },
            }
        ],
        url: "https://docs.rubocop.org/rubocop/1.50/cops_style.html#stylesinglelineblockparams",
    },
    {
        id: "Style/SingleLineMethods",
        enabled: true,
        descEn: "Avoid single-line methods.",
        descCn: "",
        versionAdded: "0.9",
        versionChanged: "1.8",
        paramList: [
            {
                param: "AllowIfMethodIsEmpty",
                defaultValue: true,
            }
        ],
        url: "https://docs.rubocop.org/rubocop/1.50/cops_style.html#stylesinglelinemethods",
    },
    {
        id: "Style/SlicingWithRange",
        enabled: true,
        descEn: "Checks array slicing is done with endless ranges when suitable.",
        descCn: "",
        versionAdded: "0.83",
        versionChanged: "",
        paramList: [],
        url: "https://docs.rubocop.org/rubocop/1.50/cops_style.html#styleslicingwithrange",
    },
    {
        id: "Style/SoleNestedConditional",
        enabled: true,
        descEn: "Finds sole nested conditional nodes which can be merged into outer conditional node.",
        descCn: "",
        versionAdded: "0.89",
        versionChanged: "1.5",
        paramList: [
            {
                param: "AllowModifier",
                defaultValue: false,
            }
        ],
        url: "https://docs.rubocop.org/rubocop/1.50/cops_style.html#stylesolenestedconditional",
    },
    {
        id: "Style/SpecialGlobalVars",
        enabled: true,
        descEn: "Avoid Perl-style global variables.",
        descCn: "",
        versionAdded: "0.13",
        versionChanged: "0.36",
        paramList: [
            {
                param: "RequireEnglish",
                defaultValue: true,
            },
            {
                param: "EnforcedStyle",
                defaultValue: "use_english_names",
                optionList: ["use_perl_names", "use_english_names", "use_builtin_english_names"],
            }
        ],
        url: "https://docs.rubocop.org/rubocop/1.50/cops_style.html#stylespecialglobalvars",
    },
    {
        id: "Style/StabbyLambdaParentheses",
        enabled: true,
        descEn: "Check for the usage of parentheses around stabby lambda arguments.",
        descCn: "",
        versionAdded: "0.35",
        paramList: [
            {
                param: "EnforcedStyle",
                defaultValue: "require_parentheses",
                optionList: ["require_parentheses", "require_no_parentheses"],
            }
        ],
        url: "https://docs.rubocop.org/rubocop/1.50/cops_style.html#stylestabbylambdaparentheses",
    },
    {
        id: "Style/StaticClass",
        enabled: false,
        descEn: "Prefer modules to classes with only class methods.",
        descCn: "",
        versionAdded: "1.3",
        paramList: [],
        url: "https://docs.rubocop.org/rubocop/1.50/cops_style.html#stylestaticclass",
    },
    {
        id: "Style/StderrPuts",
        enabled: true,
        descEn: "Use `warn` instead of `$stderr.puts`.",
        descCn: "",
        versionAdded: "0.51",
        paramList: [],
        url: "https://docs.rubocop.org/rubocop/1.50/cops_style.html#stylestderrputs",
    },
    {
        id: "Style/StringChars",
        enabled: "pending",
        descEn: "Checks for uses of `String#split` with empty string or regexp literal argument.",
        descCn: "",
        versionAdded: "1.12",
        paramList: [],
        url: "https://docs.rubocop.org/rubocop/1.50/cops_style.html#stylestringchars",
    },
    {
        id: "Style/StringConcatenation",
        enabled: true,
        descEn: "Checks for places where string concatenation can be replaced with string interpolation.",
        descCn: "",
        versionAdded: "0.89",
        versionChanged: "1.18",
        paramList: [
            {
                param: "Mode",
                defaultValue: "aggressive",
            }
        ],
        url: "https://docs.rubocop.org/rubocop/1.50/cops_style.html#stylestringconcatenation",
    },
    {
        id: "Style/StringHashKeys",
        enabled: false,
        descEn: "Prefer symbols instead of strings as hash keys.",
        descCn: "",
        versionAdded: "0.52",
        versionChanged: "0.75",
        paramList: [],
        url: "https://docs.rubocop.org/rubocop/1.50/cops_style.html#stylestringhashkeys",
    },
    {
        id: "Style/StringLiterals",
        enabled: true,
        descEn: "Checks if uses of quotes match the configured preference.",
        descCn: "",
        versionAdded: "0.9",
        versionChanged: "0.36",
        paramList: [
            {
                param: "EnforcedStyle",
                defaultValue: "single_quotes",
                optionList: ["single_quotes", "double_quotes"],
            },
            {
                param: "ConsistentQuotesInMultiline",
                defaultValue: false,
            }
        ],
        url: "https://docs.rubocop.org/rubocop/1.50/cops_style.html#stylestringliterals",
    },
    {
        id: "Style/StringLiteralsInInterpolation",
        enabled: true,
        descEn: "Checks if uses of quotes inside expressions in interpolated strings match the configured preference.",
        descCn: "",
        versionAdded: "0.27",
        paramList: [
            {
                param: "EnforcedStyle",
                defaultValue: "single_quotes",
                optionList: ["single_quotes", "double_quotes"],
            }
        ],
        url: "https://docs.rubocop.org/rubocop/1.50/cops_style.html#stylestringliteralsininterpolation",
    },
    {
        id: "Style/StringMethods",
        enabled: false,
        descEn: "Checks if configured preferred methods are used over non-preferred.",
        descCn: "",
        versionAdded: "0.34",
        versionChanged: "0.34",
        paramList: [
            {
                param: "PreferredMethods",
                defaultValue: { "intern": "to_sym" },
                validValue: (value: unknown) => {
                    if (typeof value != "object") {
                        return "值必须是对象";
                    }
                    for (const v of Object.values(value as Object)) {
                        if (typeof v !== "string") {
                            return "对象值必须是字符串";
                        }
                    }
                    return null;
                },
            }
        ],
        url: "https://docs.rubocop.org/rubocop/1.50/cops_style.html#stylestringmethods",
    },
    {
        id: "Style/Strip",
        enabled: true,
        descEn: "Use `strip` instead of `lstrip.rstrip`.",
        descCn: "",
        versionAdded: "0.36",
        paramList: [],
        url: "https://docs.rubocop.org/rubocop/1.50/cops_style.html#stylestrip",
    },
    {
        id: "Style/StructInheritance",
        enabled: true,
        descEn: "Checks for inheritance from Struct.new.",
        descCn: "",
        versionAdded: "0.29",
        versionChanged: "1.20",
        paramList: [],
        url: "https://docs.rubocop.org/rubocop/1.50/cops_style.html#stylestructinheritance",
    },
    {
        id: "Style/SwapValues",
        enabled: 'pending',
        descEn: "Enforces the use of shorthand-style swapping of 2 variables.",
        descCn: "",
        versionAdded: "1.1",
        paramList: [],
        url: "https://docs.rubocop.org/rubocop/1.50/cops_style.html#styleswapvalues",
    },
    {
        id: "Style/SymbolArray",
        enabled: true,
        descEn: "Use %i or %I for arrays of symbols.",
        descCn: "",
        versionAdded: "0.9",
        versionChanged: "0.49",
        paramList: [
            {
                param: "EnforcedStyle",
                defaultValue: "percent",
                optionList: ["percent", "brackets"],
            },
            {
                param: "MinSize",
                defaultValue: 2,
            }
        ],
        url: "https://docs.rubocop.org/rubocop/1.50/cops_style.html#stylesymbolarray",
    },
    {
        id: "Style/SymbolLiteral",
        enabled: true,
        descEn: "Use plain symbols instead of string symbols when possible.",
        descCn: "",
        versionAdded: "0.30",
        paramList: [],
        url: "https://docs.rubocop.org/rubocop/1.50/cops_style.html#stylesymbolliteral",
    },
    {
        id: "Style/SymbolProc",
        enabled: true,
        descEn: "Use symbols as procs instead of blocks when possible.",
        descCn: "",
        versionAdded: "0.26",
        versionChanged: "1.40",
        paramList: [
            {
                param: "AllowMethodsWithArguments",
                defaultValue: false,
            },
            {
                param: "AllowedMethods",
                defaultValue: ["define_method"],
            },
            {
                param: "AllowedPatterns",
                defaultValue: [],
            },
            {
                param: "AllowComments",
                defaultValue: false,
            }
        ],
        url: "https://docs.rubocop.org/rubocop/1.50/cops_style.html#stylesymbolproc",
    },
    {
        id: "Style/TernaryParentheses",
        enabled: true,
        descEn: "Checks for use of parentheses around ternary conditions.",
        descCn: "",
        versionAdded: "0.42",
        versionChanged: "0.46",
        paramList: [
            {
                param: "EnforcedStyle",
                defaultValue: "require_no_parentheses",
                optionList: ["require_parentheses", "require_no_parentheses", "require_parentheses_when_complex"],
            },
            {
                param: "AllowSafeAssignment",
                defaultValue: true,
            }
        ],
        url: "https://docs.rubocop.org/rubocop/1.50/cops_style.html#styleternaryparentheses",
    },
    {
        id: "Style/TopLevelMethodDefinition",
        enabled: false,
        descEn: "Looks for top-level method definitions.",
        descCn: "",
        versionAdded: "1.15",
        paramList: [],
        url: "https://docs.rubocop.org/rubocop/1.50/cops_style.html#styletoplevelmethoddefinition",
    },
    {
        id: "Style/TrailingBodyOnClass",
        enabled: true,
        descEn: "Class body goes below class statement.",
        descCn: "",
        versionAdded: "0.53",
        paramList: [],
        url: "https://docs.rubocop.org/rubocop/1.50/cops_style.html#styletrailingbodyonclass",
    },
    {
        id: "Style/TrailingBodyOnMethodDefinition",
        enabled: true,
        descEn: "Method body goes below definition.",
        descCn: "",
        versionAdded: "0.52",
        paramList: [],
        url: "https://docs.rubocop.org/rubocop/1.50/cops_style.html#styletrailingbodyonmethoddefinition",
    },
    {
        id: "Style/TrailingBodyOnModule",
        enabled: true,
        descEn: "Module body goes below module statement.",
        descCn: "",
        versionAdded: "0.53",
        paramList: [],
        url: "https://docs.rubocop.org/rubocop/1.50/cops_style.html#styletrailingbodyonmodule",
    },
    {
        id: "Style/TrailingCommaInArguments",
        enabled: true,
        descEn: "Checks for trailing comma in argument lists.",
        descCn: "",
        versionAdded: "0.36",
        paramList: [
            {
                param: "EnforcedStyleForMultiline",
                defaultValue: "no_comma",
                optionList: ["comma", "consistent_comma", "no_comma"],
            }
        ],
        url: "https://docs.rubocop.org/rubocop/1.50/cops_style.html#styletrailingcommainarguments",
    },
    {
        id: "Style/TrailingCommaInArrayLiteral",
        enabled: true,
        descEn: "Checks for trailing comma in array literals.",
        descCn: "",
        versionAdded: "0.53",
        paramList: [
            {
                param: "EnforcedStyleForMultiline",
                defaultValue: "no_comma",
                optionList: ["comma", "consistent_comma", "no_comma"],
            }
        ],
        url: "https://docs.rubocop.org/rubocop/1.50/cops_style.html#styletrailingcommainarrayliteral",
    },
    {
        id: "Style/TrailingCommaInBlockArgs",
        enabled: false,
        descEn: "Checks for useless trailing commas in block arguments.",
        descCn: "",
        versionAdded: "0.81",
        paramList: [],
        url: "https://docs.rubocop.org/rubocop/1.50/cops_style.html#styletrailingcommainblockargs",
    },
    {
        id: "Style/TrailingCommaInHashLiteral",
        enabled: true,
        descEn: "Checks for trailing comma in hash literals.",
        descCn: "",
        versionAdded: "0.53",
        paramList: [
            {
                param: "EnforcedStyleForMultiline",
                defaultValue: "no_comma",
                optionList: ["comma", "consistent_comma", "no_comma"],
            }
        ],
        url: "https://docs.rubocop.org/rubocop/1.50/cops_style.html#styletrailingcommainhashliteral",
    },
    {
        id: "Style/TrailingMethodEndStatement",
        enabled: true,
        descEn: "Checks for trailing end statement on line of method body.",
        descCn: "",
        versionAdded: "0.52",
        paramList: [],
        url: "https://docs.rubocop.org/rubocop/1.50/cops_style.html#styletrailingmethodendstatement",
    },
    {
        id: "Style/TrailingUnderscoreVariable",
        enabled: true,
        descEn: "Checks for the usage of unneeded trailing underscores at the end of parallel variable assignment.",
        descCn: "",
        versionAdded: "0.31",
        versionChanged: "0.35",
        paramList: [
            {
                param: "AllowNamedUnderscoreVariables",
                defaultValue: true,
            }
        ],
        url: "https://docs.rubocop.org/rubocop/1.50/cops_style.html#styletrailingunderscorevariable",
    },
    {
        id: "Style/TrivialAccessors",
        enabled: true,
        descEn: "Prefer attr_* methods to trivial readers/writers.",
        descCn: "",
        versionAdded: "0.9",
        versionChanged: "1.15",
        paramList: [
            {
                param: "ExactNameMatch",
                defaultValue: true,
            },
            {
                param: "AllowPredicates",
                defaultValue: true,
            },
            {
                param: "AllowDSLWriters",
                defaultValue: true,
            },
            {
                param: "IgnoreClassMethods",
                defaultValue: false,
            },
            {
                param: "AllowedMethods",
                defaultValue: ["to_ary", "to_a", "to_c", "to_enum", "to_h", "to_hash", "to_i", "to_int", "to_io",
                    "to_open", "to_path", "to_proc", "to_r", "to_regexp", "to_str", "to_s", "to_sym"],
            }
        ],
        url: "https://docs.rubocop.org/rubocop/1.50/cops_style.html#styletrivialaccessors",
    },
    {
        id: "Style/UnlessElse",
        enabled: true,
        descEn: "Do not use unless with else. Rewrite these with the positive case first.",
        descCn: "",
        versionAdded: "0.9",
        paramList: [],
        url: "https://docs.rubocop.org/rubocop/1.50/cops_style.html#styleunlesselse",
    },
    {
        id: "Style/UnlessLogicalOperators",
        enabled: false,
        descEn: "Checks for use of logical operators in an unless condition.",
        descCn: "",
        versionAdded: "1.11",
        versionChanged: "",
        paramList: [
            {
                param: "EnforcedStyle",
                defaultValue: "forbid_mixed_logical_operators",
                optionList: ["forbid_mixed_logical_operators", "forbid_logical_operators"],
            }
        ],
        url: "https://docs.rubocop.org/rubocop/1.50/cops_style.html#styleunlesslogicaloperators",
    },
    {
        id: "Style/UnpackFirst",
        enabled: true,
        descEn: "Checks for accessing the first element of `String#unpack` instead of using `unpack1`.",
        descCn: "",
        versionAdded: "0.54",
        paramList: [],
        url: "https://docs.rubocop.org/rubocop/1.50/cops_style.html#styleunpackfirst",
    },
    {
        id: "Style/VariableInterpolation",
        enabled: true,
        descEn: "Don't interpolate global, instance and class variables directly in strings.",
        descCn: "",
        versionAdded: "0.9",
        versionChanged: "0.20",
        paramList: [],
        url: "https://docs.rubocop.org/rubocop/1.50/cops_style.html#stylevariableinterpolation",
    },
    {
        id: "Style/WhenThen",
        enabled: true,
        descEn: "Use when x then ... for one-line cases.",
        descCn: "",
        versionAdded: "0.9",
        paramList: [],
        url: "https://docs.rubocop.org/rubocop/1.50/cops_style.html#stylewhenthen",
    },
    {
        id: "Style/WhileUntilDo",
        enabled: true,
        descEn: "Checks for redundant do after while or until.",
        descCn: "",
        versionAdded: "0.9",
        paramList: [],
        url: "https://docs.rubocop.org/rubocop/1.50/cops_style.html#stylewhileuntildo",
    },
    {
        id: "Style/WhileUntilModifier",
        enabled: true,
        descEn: "Favor modifier while/until usage when you have a single-line body.",
        descCn: "",
        versionAdded: "0.9",
        versionChanged: "0.30",
        paramList: [],
        url: "https://docs.rubocop.org/rubocop/1.50/cops_style.html#stylewhileuntilmodifier",
    },
    {
        id: "Style/WordArray",
        enabled: true,
        descEn: "Use %w or %W for arrays of words.",
        descCn: "",
        versionAdded: "0.9",
        versionChanged: "1.19",
        paramList: [
            {
                param: "EnforcedStyle",
                defaultValue: "percent",
                optionList: ["percent", "brackets"]
            },
            {
                param: "MinSize",
                defaultValue: 2,
            },
            {
                param: "WordRegex",
                defaultValue: "(?-mix:\\A(?:\\p{Word}|\\p{Word}-\\p{Word}|\\n|\\t)+\\z)",
            }
        ],
        url: "https://docs.rubocop.org/rubocop/1.50/cops_style.html#stylewordarray",
    },
    {
        id: "Style/YodaCondition",
        enabled: true,
        descEn: "Forbid or enforce yoda conditions.",
        descCn: "",
        versionAdded: "0.49",
        versionChanged: "0.75",
        paramList: [
            {
                param: "EnforcedStyle",
                defaultValue: "forbid_for_all_comparison_operators",
                optionList: ["forbid_for_all_comparison_operators", "forbid_for_equality_operators_only",
                    "require_for_all_comparison_operators", "require_for_equality_operators_only"],
            }
        ],
        url: "https://docs.rubocop.org/rubocop/1.50/cops_style.html#styleyodacondition",
    },
    {
        id: "Style/YodaExpression",
        enabled: false,
        descEn: "Forbid the use of yoda expressions.",
        descCn: "",
        versionAdded: "1.42",
        versionChanged: "1.43",
        paramList: [
            {
                param: "SupportedOperators",
                defaultValue: ['*', '+', '&'],
            }
        ],
        url: "https://docs.rubocop.org/rubocop/1.50/cops_style.html#styleyodaexpression",
    },
    {
        id: "Style/ZeroLengthPredicate",
        enabled: true,
        descEn: "Use #empty? when testing for objects of length 0.",
        descCn: "",
        versionAdded: "0.37",
        versionChanged: "0.39",
        paramList: [],
        url: "https://docs.rubocop.org/rubocop/1.50/cops_style.html#stylezerolengthpredicate",
    },
];